【发布时间】:2018-09-27 10:59:32
【问题描述】:
单击表格单元格后,我想从嵌入在导航控制器中的表格视图转到另一个视图控制器。我仍然希望将第二个视图控制器嵌入到同一个导航控制器中。因此,我通过情节提要创建了转场。
但是,我想在点击单元格后有条件地检查是否应该执行 segue。
我已经检查了方法shouldPerformSegueWithIdentifier,它可以满足我的需要,但不幸的是,它在表格点击处理程序之前执行。如果我删除故事板转场并仅通过performSegue 转场,我的第二个视图控制器将不再嵌入同一个导航控制器中。
有什么建议吗?
这是我的代码:
// Called on click event on table cell
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
let app = apps[indexPath.section]
if app.state == .INSTALLED {
let inputVC = self.navigationController?.viewControllers[1] as? InputVC
inputVC?.app = app
performSegue(withIdentifier: "showAccSync", sender: self)
} else {
// show alert
}
}
【问题讨论】:
-
如果您从 tableview 单元格的操作中触发 segue,那么
shouldPerformSegue就是您想要的;但是你不应该在didSelectRowAt中有任何代码,或者你可以从场景中的橙色视图控制器对象按住 ctrl-drag 到下一个场景,然后在didSelectRowAt中使用performSegue执行该segue -
@Paulw11 感谢您的提示。当我更改以橙色 vc 对象为源的 segue 时,我从导航控制器获得
inputVC的那一行让我越界了 -
是的。那条线没有多大意义。你想通过访问导航控制器堆栈来实现什么?如果你试图访问新的视图控制器,你可以在
prepareForSegue -
您从传递给
prepareFor:函数的 segue 的目标属性中获取该引用。在您调用performSegue之前,目标视图控制器不存在 -
@Paulw11 成功了,谢谢
标签: ios swift segue uistoryboard