【问题标题】:How to push segue from cell click in table view to another view controller [duplicate]如何将segue从表格视图中的单元格单击推送到另一个视图控制器[重复]
【发布时间】: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)

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

【问题讨论】:

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

标签: ios iphone swift uitableview


【解决方案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,示例如下,

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多