我的tableview中有一个未定义的级别(深度),所以我希望能够在视图和它自身之间创建一个segue,这样我就可以调用它,只要我有子级别来发现。我怎么能这样做?
我想在我需要时直接使用[self.navigationView pushViewController],但我希望新控制器在我的SB中使用定义的视图。
谢谢,
编辑:目前我发现的唯一解决方案是复制VC,在VC1和VC2之间设置一个名为'showNext'的segue,以及VC1和VC2之间的segue以相同的方式调用。是不是有更好的解决方案?答案 0 :(得分:19)
如果你正在使用动态单元原型,你显然可以从表格视图单元格到控制器做一个没有任何问题的segue。
当你制作segue时,你最终得到:
但让我们想象一下,有一些原因对你不起作用,例如:您不能从单元格中获得segue(例如,您需要从didSelectRowAtIndexPath
调用segue,而不是选择单元格)。在这种情况下,您无法使用以前的技术。
在这种情况下有几种选择:
作为pointed out by Chris,如果只支持iOS 6及更高版本,请使用上述技巧,但(a)确保didSelectRowAtIndexPath
使用self
sender
然后让shouldPerformSegueWithIdentifier
只允许segue sender == self
(因此当sender
是表格视图单元格时,它将被取消);
也许更容易,只是不要定义一个segue并手动didSelectRowAtIndexPath
手动instantiateViewControllerWithIdentifier
,然后根据需要推送/显示该视图控制器;或
您可以使用以下方法,kludgy解决方法:简而言之,向视图控制器添加一个按钮(将其向下拖动到底部的栏),它将不会显示在视图上,但你可以使用它的segues。首先,将圆角按钮拖动到场景底部的控制器栏:
现在,您可以从该按钮向视图控制器创建一个segue:
因此,你最终再次得到了自我引用的信息:
您必须为该segue指定一个标识符,因此您可以通过performSegueWithIdentifier
以编程方式调用它,但它可以正常工作。不是最优雅的解决方案,但我认为这比在故事板上增加一个场景更好。
这些都不是理想的,但你有很多选择。
答案 1 :(得分:0)
这个过程让我做同样的事情......
像往常一样在故事板中设置您的tableview。不要给原型单元格提供单元标识符。通过从单元格拖动到控制器,如上所述设置segue。
在viewDidLoad中注册单元格类
//register the cell identifier as we are not loading form a storybard
[_aTableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"CellID"];
在您的cellForRowAtIndexPath中设置您的单元格
static NSString *CellIdentifier = @"CellID";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
现在您可以使用didSelectRowAtIndexPath并调用performSegueWithIdentifier。 prepareForSegue只会被调用一次。