以编程方式执行segue,并将其保留在情节提要中

pho*_*bus 1 ios uistoryboard segue swift

我想在单击表格单元格后从嵌入在导航控制器中的表格视图选择到另一个视图控制器。我仍然希望将第二个视图控制器嵌入到同一导航控制器中。因此,我通过情节提要创建了segue。

但是,我想在点击单元格后有条件地检查是否应该执行segue。

我已经签出了shouldPerformSegueWithIdentifier满足我需要的方法,但是不幸的是,它在表单击处理程序之前执行。如果我删除情节提要segue并仅通过进行segue 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
    }
}
Run Code Online (Sandbox Code Playgroud)

Tam*_*gel 5

您应该从视图控制器本身而不是单元格启动情节提要剧集。这样,如果您点击一个单元格,它将不会自动执行。

从视图控制器中选择

如果要在不使用情节提要的情况下将视图控制器推送到导航堆栈,请使用UINavigationControllerpushViewController

if let secondVc = storyboard?.instantiateViewController(withIdentifier: "Second") {
    navigationController?.pushViewController(secondVc, animated: true)
}
Run Code Online (Sandbox Code Playgroud)