如何将segue从表格视图中的单元格单击推送到另一个视图控制器[重复]

Posted

技术标签:

【中文标题】如何将segue从表格视图中的单元格单击推送到另一个视图控制器[重复]【英文标题】:How to push segue from cell click in table view to another view controller [duplicate] 【发布时间】:2016-05-03 11:36:01 【问题描述】:

我有一个表格视图控制器,通过单击单元格,我将用户重定向到详细视图控制器。但是当我执行 segue“当前视图控制器”时,它工作正常。但我需要的是什么?

我需要通过点击表格视图单元格来执行push segue。怎么做?

这是我的代码:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
        let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let vc: BusinessDetailViewController = storyboard.instantiateViewControllerWithIdentifier("BusinessDetailViewController") as! BusinessDetailViewController
        vc.BusinessData = arrDict[indexPath.row]
        self.presentViewController(vc, animated: true, completion: nil) 
    

我已经尝试过以下行:

 self.navigationController?.pushViewController(vc, animated: true)

但它不起作用。请任何解决方案!

【问题讨论】:

我没有执行任何拖放操作,也没有设置任何标识符名称。我需要完全以编程方式执行。我也提到了帽子。但这对我没有帮助 您当前的视图控制器是否嵌入在导航控制器中? 【参考方案1】:

首先你的UITableViewController 必须有一个UINavigationController

要从 xCode 菜单快速将其嵌入到您的表格中

:

然后,您必须创建segue,从UITableViewController 按住ctrl-drag 到目标viewController:

然后选择segue并在属性检查器中给它一个标识符:

现在您可以在代码中执行此转场:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 
    let cell = tableView.cellForRowAtIndexPath(indexPath)
    tableView.deselectRowAtIndexPath(indexPath, animated: true)

    performSegueWithIdentifier("mySegue", sender: cell)

【讨论】:

【参考方案2】:

如果您不使用UINavigationController,则在storyboard 中从表格单元格到目标viewController 添加segue,并将identifier 提供给segue

然后在单元格上单击调用

- performSegueWithIdentifier:sender:

并实施

- prepareForSegue:sender:

【讨论】:

感谢@jagdish 这对我有用!我从在大纲视图中选择的 Cell 拖到 View Controller,给 segue 一个 Identifier,然后将其传递给 performSegue()。请注意,我还没有对示例中的数据做任何事情,因为它正在学习 Swift。但是转场正在工作:func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) let row = indexPath.row let section = indexPath.section performSegue(withIdentifier: “MySegueID”, sender: self) 【参考方案3】:

如果没有导航控制器,就无法推送控制器。您的self.navigationController 属性是nil(可以查看)

如何解决?

A :您需要通过代码或故事板将视图控制器嵌入到导航控制器中

【讨论】:

在代码中。如何使用导航控制器调用我当前的视图控制器。因为有更多的视图控制器。所以如果我现在通过情节提要这样做。肯定我的所有视图都会受到影响【参考方案4】:

试试这个代码,它对我有用,

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)

            let storyboard = UIStoryboard(name: "Main", bundle: nil)

            let controller = storyboard.instantiateViewControllerWithIdentifier("PlayViewController") as! PlayViewController

            self.navigationController?.pushViewController(controller, animated: true)
        

并设置情节提要 ID,示例如下,

希望对你有帮助

【讨论】:

以上是关于如何将segue从表格视图中的单元格单击推送到另一个视图控制器[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 UIButton 单击时以编程方式创建 Segue 或推送到另一个视图控制器

UISplitViewController 将详细视图推送到表/主视图

无法将视图推送到 searchResultsController

使用自定义表格视图单元格中的故事板segue

表视图推送到新视图 XIB 的

从 Swift 中的自定义数据单元开始