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

时间:2012-02-09 06:16:06

标签: iphone objective-c ios xcode

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

4 个答案:

答案 0 :(得分:14)

这是一种无证件的行为,但

NSArray *segueTemplates = [self valueForKey:@"storyboardSegueTemplates"] ;  

应该返回一个数组,其中包含可以传递给performSegueWithIdentifier的所有可能的segue值。

答案 1 :(得分:10)

在故事板中没有用于枚举segue的公共API。

答案 2 :(得分:1)

对于Objective-C,如果我知道segue的名称,我曾经使用它。

- (BOOL)isValidSegueId:(NSString *)segueId {
    NSArray *filteredArray = [[self valueForKey:@"storyboardSegueTemplates"] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"identifier = %@", segueId]];
    return filteredArray.count > 0;
}

迅速:

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

您可以将其与此链接https://stackoverflow.com/a/35060917/1058199结合使用,以获取当前视图控制器的所有序列并进行验证。

答案 3 :(得分:-1)

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