我已经在swift中编写了一个应用程序,在有问题的部分中,它有两个视图及其相应的视图控制器。此部分的目的是让用户单击控制器1上的某个单元格,该单元格打开一个带有表视图的模式视图,其中可以选择表视图单元格。当用户点击一个时,它应返回到控制器1并更新原始单元格上的详细信息文本。 问题是标签不会更新。这是代码:
此代码来自模态视图控制器。这是获取所选单元格并更新变量的代码。
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
var find = totalProducts[productSectionTitles[indexPath.section]]!
selectedCell = find[indexPath.row]
let rootController = TableViewController()
println("\(selectedCell) from productController from selectedCell variable")
rootController.updateText(selectedCell)
self.dismissViewControllerAnimated(true, completion: nil)
cell.accessoryType = UITableViewCellAccessoryType.Checkmark
}
此代码来自控制器1,其中启动了模态视图。这是从模态视图控制器调用来更新文本。
func updateText(transferVar: String) {
println("\(transferVar) from rootController from transfer parameter")
detailsLabel?.text = transferVar
println(detailsLabel?.text)
}
因此参数在模态视图控制器和rootController之间完美地传输数据,并且它肯定保存一个值,因为它打印出正确的值。但是一旦我尝试分配它返回nil,我发现这是println()之后应该分配的detailText。这是单击单元格时控制台打印的内容。
Wood4 from productController from selectedCell variable
Wood4 from rootController from transfer parameter
nil
我不知道如何让标签打印出transferVar。我应该补充说标签已连接到视图。我该如何解决这个问题?
提前致谢。 希望你明白。 :
答案 0 :(得分:0)
是否已加载detailsLabel?如果它是一个隐含的未打开的出口,它可能还没有装载,但仍然是零。尝试在没有?
的情况下访问它。现在它无声地失败,没有它应该崩溃的?
。
为了确保在分配标签之前加载detailsLabel,您可以在viewDidLoad()
中进行分配。一种简单的方法是在text()
中分配一个实例变量,然后在viewDidLoad()
中将标签设置为该变量。
var labelText: String!
func text(transferVar: String) {
println("\(transferVar) from rootController from transfer parameter")
labelText = transferVar
}
public override func viewDidLoad(){
detailsLabel.text = labelText
}