从不同的视角射击segue

时间:2013-04-18 13:04:49

标签: ios objective-c uistoryboard segue

我有一个从FirstViewController导航到SecondViewController的segue。只需按一下按钮即可发生这种情况。该按钮的代码是

- (IBAction)segue:(id)sender {
[self performSegueWithIdentifier:@"myIdentifier" sender:self];
}

当我按下按钮时,这种情况正确发生。

我想要做的是从另一个视图中激活此方法。我试着做了

FirstViewController fvc = [[FirstViewController alloc] init];
[fvc segue:nil];

当我尝试这个时,我收到错误消息,Reciever没有带有标识符'myIdentifier'的segue

如何从另一个视图以编程方式触发此segue?

1 个答案:

答案 0 :(得分:2)

这里有一些问题,但它们归结为几个关键点:

  • Segues是一个故事板,因此如果从故事板中实例化,视图控制器只“知道”segues。
  • 视图控制器必须在屏幕上才能执行segue。
  • Segues是从一个特定视图控制器转换到另一个特定视图控制器。

所以,在你的代码片段中:

FirstViewController fvc = [[FirstViewController alloc] init];
[fvc segue:nil];

第一个问题是,alloc - init - ing为您提供了FirstViewController的实例,该实例对其来自的故事板一无所知,因此它不知道什么关于segues。 (仅此一项可以使用[instantiateViewControllerWithIdentifier:] [1]修复,但这并不能解决您的整个问题。)第二个问题是此实例不适合UI层次结构的任何位置 - 它没有'被呈现为模态视图控制器,它不是当前导航控制器中的顶视图控制器,它不是可见窗口的根视图控制器等。为了将屏幕从一个视图转换到另一个视图,第一个视图需要是在屏幕上。

您想要做的是从当前屏幕上的内容过渡到此segue的目标。但故事板segue的概念不仅仅是一个目的地的过渡 - 它是一个来源,一个目的地,以及它们之间的过渡或关系。如果您有不同的源视图,则需要不同的segue。因此,如果您已经有FirstViewControllerSecondViewController的segue,并且您希望从OtherViewController(假设现在是屏幕上的那个)到SecondViewController进行类似的转换,您需要制作第二个将OtherViewController连接到SecondViewController的字段。