我有一个从FirstViewController导航到SecondViewController的segue。只需按一下按钮即可发生这种情况。该按钮的代码是
- (IBAction)segue:(id)sender {
[self performSegueWithIdentifier:@"myIdentifier" sender:self];
}
当我按下按钮时,这种情况正确发生。
我想要做的是从另一个视图中激活此方法。我试着做了
FirstViewController fvc = [[FirstViewController alloc] init];
[fvc segue:nil];
当我尝试这个时,我收到错误消息,Reciever没有带有标识符'myIdentifier'的segue
如何从另一个视图以编程方式触发此segue?
答案 0 :(得分:2)
这里有一些问题,但它们归结为几个关键点:
所以,在你的代码片段中:
FirstViewController fvc = [[FirstViewController alloc] init];
[fvc segue:nil];
第一个问题是,alloc
- init
- ing为您提供了FirstViewController
的实例,该实例对其来自的故事板一无所知,因此它不知道什么关于segues。 (仅此一项可以使用[instantiateViewControllerWithIdentifier:
] [1]修复,但这并不能解决您的整个问题。)第二个问题是此实例不适合UI层次结构的任何位置 - 它没有'被呈现为模态视图控制器,它不是当前导航控制器中的顶视图控制器,它不是可见窗口的根视图控制器等。为了将屏幕从一个视图转换到另一个视图,第一个视图需要是在屏幕上。
您想要做的是从当前屏幕上的内容过渡到此segue的目标。但故事板segue的概念不仅仅是一个目的地的过渡 - 它是一个来源,一个目的地,以及它们之间的过渡或关系。如果您有不同的源视图,则需要不同的segue。因此,如果您已经有FirstViewController
到SecondViewController
的segue,并且您希望从OtherViewController
(假设现在是屏幕上的那个)到SecondViewController
进行类似的转换,您需要制作第二个将OtherViewController
连接到SecondViewController
的字段。