ios - 从不同的 View 触发 segue

标签 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

我如何从另一个 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。因此,如果您已经有了从 FirstViewControllerSecondViewController 的转场,并且您想要从 OtherViewController 进行类似的转换(假设屏幕上显示的是现在)到 SecondViewController,您需要进行第二个 segue,将 OtherViewController 连接到 SecondViewController

关于ios - 从不同的 View 触发 segue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16083788/

相关文章:

ios - 因 XCode 8 方向的特征而异

ios - xcode Storyboard - ibtoold 解压缩异常

ios - Storyboard设计模式(分享或不分享)

mysql - 回合制游戏的数据库设计

ios - 如何使用从 viewDidLoad 获取的信息设置 UIPickerView 值?

ios - 我将如何在 UIWebView 中调整文本?

ios - UIButton 中的 UIBezierPath 圆角

objective-c - 如何使用 NSViewController 识别 modalForm 窗口

ios - didRangeBeacons 委托(delegate)调用 CLProximityNear 和 CLProximityFar 太快了

objective-c - ios)对象-c。如何自定义导航栏上的按钮