[英]Swift: Passing Variable between Views not updating first time
我有一个包含单元格数据的tableview。 当我单击该单元格时,它将带我到另一个视图控制器,并在新ViewController的UIlabel中显示该单元格标签。
但是,当我返回到表格视图并选择其他单元格时,新视图控制器上的值不会立即更新。 它显示最后单击的单元格,然后如果我返回并再次重复该过程,它将更新。
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let currentCell = tableView.cellForRowAtIndexPath(indexPath)! as UITableViewCell
self.labeltosend = currentCell.textLabel!.text!
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == PostSegueIdentifier {
if let destination = segue.destinationViewController as? NewViewController {
destination.newlabel = labeltosend
}
}
}
我是否应该以某种方式重新加载数据?
@IBOutlet weak var dispLabel: UILabel!
var newlabel = String()
override func viewWillAppear(animated: Bool) {
dispLabel.text = newlabel
}
override func viewDidLoad() {
super.viewDidLoad()
// Do view setup here.
}
如果从单元格到下一个视图控制器绘制segue
,则不会调用prepareForSegue(_:sender)
。 尝试从视图控制器到视图控制器绘制序列。 并使用tableView(_:didSelectRowAtIndexPath:indexPath)
performSegueWithIdentifier("MySegueIdentifier" sender:self)
执行手动tableView(_:didSelectRowAtIndexPath:indexPath)
。 有关更多信息,请查看此答案 。
认为有时在didSelectRowAtIndexPath之前会调用prepareForSegue,您可以将该代码移至prepareForSegue。 当您在prepareForSegue中将发送方设置为Segue时,正是分流的indexPath,因此您可以执行此类操作。
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == PostSegueIdentifier {
if let destination = segue.destinationViewController as? NewViewController {
let indexPath = sender as NSIndexPath
let currentCell = tableView.cellForRowAtIndexPath(indexPath)! as UITableViewCell
self.labeltosend = currentCell.textLabel!.text!
destination.newlabel = labeltosend
}
}
}
您应该阅读邓肯的评论。
第一:如果您的Segue是从UITableViewCell连接的,则不要。 删除它,然后从视图控制器本身连接segue。
第二:在didSelectRowAtIndexPath
方法上,调用prepareForSegue
方法。
最后在目标控制器上:
@IBOutlet weak var dispLabel: UILabel!
var newlabel = String()
override func viewWillAppear(animated: Bool) {
//dispLabel.text = newlabel
}
override func viewDidLoad() {
super.viewDidLoad()
// Do view setup here.
dispLabel.text = newlabel
}
另外,您需要改善命名约定。 真是令人困惑
希望这可以帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.