只能在使用硬编码字符串时更改 UIBarButton 标题
Posted
技术标签:
【中文标题】只能在使用硬编码字符串时更改 UIBarButton 标题【英文标题】:Only able to change UIBarButton title when using a hard-coded string 【发布时间】:2015-01-15 15:08:08 【问题描述】:我有一个很常见的场景。基于数据的未知深度树,所以我有一个导航控制器,其根控制器为 tableView
控制器。每次我需要更深入时,我都会创建一个新的 tableview
控制器,根据之前的选择用数据填充它,然后将新的 tableview
控制器推送到导航控制器堆栈中:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
let cell = tableView.cellForRowAtIndexPath(indexPath)
let cellText = cell?.textLabel?.text
let bcti = CustomDataClass(querystring: cellText!)
if(bcti.getStatus() == "Drill")
let bctvc = CustomTableViewControllerClass(tableinfo: bcti)
//Note: self in this instance is my custom UITableViewController class
self.navigationItem.backBarButtonItem = UIBarButtonItem(title: cellText, style: UIBarButtonItemStyle.Plain, target: nil, action: nil)
self.navigationController?.pushViewController(bctvc, animated: true)
这很好,一个新的tableview
控制器是基于从前一个控制器中选择的单元格创建的,将它推送到导航堆栈上也很好。奇怪的是我似乎无法让后栏项目显示从前一个控制器中选择的值。
如果我使用包含先前选择的单元格文本的cellText
变量(如上面的代码所示)来分配UIBarButton
title
,它似乎忽略了这一点并默认将“返回”作为标题.
cellText
变量显然具有正确的值,我使用 NSLog
语句进行了验证,甚至还尝试有条件地展开它以 100% 确保它在运行时具有值。它首先被用来取得进展,所以我认为我们可以希望排除一个可选的nil
问题。
对我来说真正奇怪的是,将字符串硬编码到标题中效果很好。因此,例如,如果我替换:
self.navigationItem.backBarButtonItem = UIBarButtonItem(title: cellText, style: UIBarButtonItemStyle.Plain, target: nil, action: nil)
与:
self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "Bananas", style: UIBarButtonItemStyle.Plain, target: nil, action: nil)
它正确显示 Bananas 而不是 Back。我还可以声明一个具有不同值的变量和硬代码,它可以正常工作。即:
let tempvar = "Bananas!"
self.navigationItem.backBarButtonItem = UIBarButtonItem(title: tempvar, style: UIBarButtonItemStyle.Plain, target: nil, action: nil)
似乎只有当我尝试访问与单元格关联的文本时它才不起作用。
有人知道我在这里缺少什么吗?其他可能值得注意的是,我正在使用 Storyboard 来设置我的初始导航控制器和 tableview 控制器,我只是以编程方式创建 tableview
控制器的新实例。
【问题讨论】:
您检查过 cellText 变量以了解其实际值吗? @PeterSegerblom 是的,正如我所提到的,我使用显示展开值的 NSLog 检查了它,并且我还尝试使用条件展开设置标题(即:if let test = cellTextself .navigationItem.backBarButtonItem = UIBarButtonItem(title:test,... 查看backBarButtonItem
的the documentation 的内容。单元格文本可能太长了。
@A-Live 我忘了提到这一点,但我也尝试过硬编码单元格文本的确切值。并且硬编码相同的值可以正常工作,所以我认为在这种情况下字符串的长度不是问题。
不要尝试硬编码相同的值,而是尝试更改数据源,使其具有非常短的文本值,看看它是否有效。例如。单元格现在可能正在显示多行文本的第一行,并且您可能已经硬编码了仅第一行(唯一可见的)行的副本。硬编码很糟糕,即使对于测试也是如此。
【参考方案1】:
查看 backBarButtonItem 的文档说明。单元格文本可能太长了。
不要尝试对相同的值进行硬编码,而是尝试更改数据源,使其具有非常短的文本值,并查看它是否有效。例如。单元格现在可能正在显示多行文本的第一行,并且您可能已经硬编码了仅第一行(唯一可见的)行的副本。硬编码很糟糕,即使对于测试也是如此。
【讨论】:
以上是关于只能在使用硬编码字符串时更改 UIBarButton 标题的主要内容,如果未能解决你的问题,请参考以下文章
本机 MongoDB:为啥我的 switch 语句不能使用字段名称,而只能使用硬编码值?