Xcode 6 - 将推出segue转换为同一个视图控制器

8
我有一个表视图控制器,点击单元格可以触发许多不同类型的推送转换,基于单元格中数据的类型。正确转换的标识符在tableView:didSelectRowAtIndexPath:中确定,然后使用self.performSegueWithIdentifier触发转换。
对于其中一个转换,我想将另一个相同的视图控制器实例推入导航堆栈。是否可以在不必将新的相同类型的视图控制器对象拖到故事板上的情况下实现这一点?到目前为止,我只能将转换与相同的视图控制器连接起来,如果我从表单元格向视图控制器Ctrl + Drag。这不是我想要的。

1
可能是Storyboard Segue From View Controller to Itself的重复问题。 - Gustavo Barbosa
2
不要使用segue。在代码中实例化一个新的实例并推送或呈现它。我认为没有任何方法可以看到segue(从控制器返回到同一控制器的线),因此使用segue没有真正的优势。 - rdelmar
我接受了下面Tatonka的答案,因为它是解决我的问题的有效方法。感谢提供其他问题链接。我看到了一些非常有趣的答案,特别是这个,因为它确实回答了我所需的内容:https://dev59.com/OGox5IYBdhLWcg3wazmQ - Fergal Rooney
3个回答

10

建议不要使用转场动画。相反,您可以通过编程方式推送新的相同视图控制器实例,这将具有与执行转场动画相同的效果。不同之处在于,不会调用转场代理方法,如 prepareForSegue。

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    MyViewController *vc = [[MyViewController alloc] init];
    [self.navigationController pushViewController:vc animated:YES];
} 

10
这段代码的意思是:创建一个名为“moneyVC”的视图控制器,然后将其加入导航控制器以便显示。具体实现方式是定义一个名为“vc”的MyViewController类型的指针变量,并通过storyboard的instantiateViewControllerWithIdentifier方法来获取这个视图控制器的实例。最后,使用pushViewController方法将其推入导航控制器中并启用动画效果。 - Michael Lorenzo

1

补充上面的答案,您可以在Swift 3中使用以下方法:

 let vc = ViewController()          
 self.navigationController?.show(vc, sender: nil)

如果您正在使用Storyboard,您可以使用以下内容:
let vc = self.storyboard?.instantiateViewController(withIdentifier: "ViewControllerID") as! YourViewController
self.navigationController?.show(vc, sender: nil)

1
  1. 在IB中创建一个Storyboard Reference
  2. 将其引用到视图控制器。
  3. 然后,您可以从视图控制器创建一个segue到引用,该引用指向自身。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接