以编程方式枚举UIViewController的传出Segue

18

对于iOS 5中视图控制器之间的导航,UIViewController类提供了[self performSegueWithIdentifier:@"MySegue" sender:sender]选择器。大概在幕后,故事板实现知道从任何视图控制器发出的转场标识符列表,即[@"MySegue", @"MySegue2"]。有没有办法以编程方式访问此列表,获取可以传递给performSegueWithIdentifier的标识符?

4个回答

15

这是一个未经记录的行为,但是

NSArray *segueTemplates = [self valueForKey:@"storyboardSegueTemplates"] ;  
应该返回包含所有可能的segue值的数组,这些值可以传递给performSegueWithIdentifier

1
似乎在其他地方得到了验证:https://gist.github.com/away4m/5bb5d773cb93aa9e60a1 - 感谢Rog! - btown

10

目前没有公共API来枚举storyboard中的segue。


1
很遗憾,我的唯一选择就是捕获异常(如果它抛出的话)...这不像苹果的风格。 - Daniel T.
我想重新评估这个问题,尽管我的希望很渺茫 :D - Daij-Djan

2
对于 Objective-C,如果我知道 segue 的名称,我曾经会使用这个。
- (BOOL)isValidSegueId:(NSString *)segueId {
    NSArray *filteredArray = [[self valueForKey:@"storyboardSegueTemplates"] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"identifier = %@", segueId]];
    return filteredArray.count > 0;
}

Swift:

    func isValidSegueId(_ segueId: String?) -> Bool {
    let filteredArray = (value(forKey: "storyboardSegueTemplates") as? NSArray)?.filtered(using: NSPredicate(format: "identifier = %@", segueId ?? ""))
    return (filteredArray?.count ?? 0) > 0
}

你可以结合这个链接https://dev59.com/oZPfa4cB1Zd3GeqPD3-X#35060917,获取当前视图控制器的所有segue并进行验证。

-2

将与视图控制器相关的所有segue存储到一个数组中,然后在视图控制器中访问此数组。


所有的segue连线。 - Alex Zavatone

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