我有一个从 FirstViewController 导航到 SecondViewController 的 segue。这是通过按下按钮来实现的。按钮的代码是
- (IBAction)segue:(id)sender {
[self performSegueWithIdentifier:@"myIdentifier" sender:self];
}
当我按下按钮时,这会正确发生。
我想做的是从另一个角度触发这个方法。我试过做
FirstViewController fvc = [[FirstViewController alloc] init];
[fvc segue:nil];
当我尝试这个时,我收到错误消息,Reciever 没有带有标识符“myIdentifier”的 segue
我如何从另一个 View 以编程方式触发此 segue?
最佳答案
这里有一些问题,但它们归结为几个关键点:
- Segues 是 Storyboard的东西,所以 View Controller 只有在从 Storyboard实例化时才“知道”segues。
- View Controller 必须在屏幕上才能执行转场。
- Segues 是从一个特定 View Controller 到另一个特定 View Controller 的转换。
因此,在您的代码段中:
FirstViewController fvc = [[FirstViewController alloc] init];
[fvc segue:nil];
第一个问题是 alloc
-init
-ing 给你一个 FirstViewController
的实例,它对 Storyboard一无所知来自,所以它对segues一无所知。 (仅此一项就可以使用 [instantiateViewControllerWithIdentifier:
][1] 来解决,但这并不能解决您的整个问题。)第二个问题是该实例不适合 UI 层次结构中的任何位置 - - 它没有作为模态视图 Controller 呈现,它不是当前导航 Controller 中的顶 View Controller ,它不是可见窗口的 Root View Controller 等。为了将屏幕从一个 View 转换到另一个 View ,第一个 View 需要在屏幕上。
听起来您想要做的是从当前屏幕上的内容过渡到此转场的目标。但是 Storyboard转场的概念不仅仅是带有目的地的过渡——它是源、目的地以及它们之间的过渡或关系。如果您有不同的源代码 View ,则需要不同的 segue。因此,如果您已经有了从 FirstViewController
到 SecondViewController
的转场,并且您想要从 OtherViewController
进行类似的转换(假设屏幕上显示的是现在)到 SecondViewController
,您需要进行第二个 segue,将 OtherViewController
连接到 SecondViewController
。
关于ios - 从不同的 View 触发 segue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16083788/