繁体   English   中英

执行Segue - TableViewCell.xib到UIView - 和 - TableView.xib到UIViewController -

[英]Performing Segue from - TableViewCell.xib to UIView - and - TableView.xib to UIViewController -

如何在单击TableCell时从一个.xib(TableCell.xib)到另一个.xib(UIViewController)执行segue?

  override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        print(results?[indexPath.row])  // prints successfully
      ... 
      // apply below chunks here...
  }

首先,我尝试在Storyboard中设置手动segue。 请注意,TableView和TableViewCell是外部xib,但TableView的父级是在Storyboard中。 所以,我尝试从parent-ViewController控件拖动到detailViewController(和标识符:showDetails)。但是,不起作用。

      ...
        NSOperationQueue.mainQueue().addOperationWithBlock({ () -> Void in
            self.performSegueWithIdentifier("showDetails", sender: AnyObject?())
        })
      ...

显然,我收到了这个错误(因为TableView在.xib中,而parent和detailsVC在Storyboard中,我按住Ctrl +从parentVC拖到detailsVC但TableView1显然无法识别主故事板中的segue):

TableView1:0x7f97626a3280>)没有标识符'showDetails'的segue'


然后我尝试创建一个ViewController并尝试添加var parentNavigationController : UINavigationController! 在顶部并在didSelectRowAtIndex内引用下面的块

   ...
     let newVC : UIViewController = CellDetailsVC()
     newVC.title = "DetailsView"
     print(newVC)

     parentNavigationController!.pushViewController(newVC, animated: true)

但是,我收到一个错误:

DetailsVC:0x7ff7794ae550>致命错误:在解包可选值时意外发现nil


最后,我还在didSelectRowAtIndex尝试了下面的块,并得到了一些接近(因为我可以使用dismissView来< Back ); 但不完全是我想要的。 它的问题是segue动画看起来像页面来自底部。

   ...
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let vc = storyboard.instantiateViewControllerWithIdentifier("VideoDetailsVC") as UIViewController
    self.presentViewController(vc, animated: true, completion: nil)
 }

我也收到一个警告(但没有崩溃)由于某种原因我无法弄清楚:

不鼓励在分离的视图控制器上呈现视图控制器


  • 哪种方法合适? 或者有更好的方法来适应我想要达到的目标吗?

  • 首先,从didSelectRowAtIndex (in TableView.xib class)执行segue到新的ViewController(Storyboard或xib)的正确方法是什么?

  • 其次,假设TableViewCell.xib中有一个图像缩略图。 在点击该视图时,对新UIView执行segue的正确方法是什么? (如全屏图像/可忽略)

你的第二种方法看起来是正确的,但当然你在那里做错了。 您需要将Segue从Parent ViewController拖放到Detail ViewController并在Storyboard中为其指定Segue标识符(请查看下面附带的图像)。 在didSelectRowAtIndexPath中你需要做下面的代码:

    self.performSegueWithIdentifier("showDetailViewController", sender: nil)

我可以看到你已经尝试过,但看起来你错过了一些设置Segue Identifier或在performSegueWithIdentifier方法中给出错误标识符的步骤。 你的Parent ViewController也应该嵌入UINavigationController,以防你错过那个东西:) 在此输入图像描述

另外请记住,你应该从一个ViewController到同一级别的另一个ViewController而不是从一个View到另一个ViewController执行导航(这里是它的Segue)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM