Iphone 以编程方式枚举UIViewController的传出段
对于视图控制器之间的iOS 5导航,Iphone 以编程方式枚举UIViewController的传出段,iphone,objective-c,ios,xcode,Iphone,Objective C,Ios,Xcode,对于视图控制器之间的iOS 5导航,UIViewController类提供了[self-performsguewithidentifier:@“MySegue”发送方:发送方]选择器。据推测,在幕后,故事板实现知道从任何视图控制器传出的序列标识符列表,即[@“MySegue”、@“MySegue2”]。是否有任何方法可以通过编程方式访问此列表,要获取可传递给performSegueWithIdentifier的标识符?没有用于枚举情节提要中分段的公共API。将与视图控制器相关的所有分段存储在数组
UIViewController
类提供了[self-performsguewithidentifier:@“MySegue”发送方:发送方]
选择器。据推测,在幕后,故事板实现知道从任何视图控制器传出的序列标识符列表,即[@“MySegue”、@“MySegue2”]
。是否有任何方法可以通过编程方式访问此列表,要获取可传递给performSegueWithIdentifier的标识符?没有用于枚举情节提要中分段的公共API。将与视图控制器相关的所有分段存储在数组中,然后在视图控制器中访问此数组。这是一种未记录的行为,但
NSArray *segueTemplates = [self valueForKey:@"storyboardSegueTemplates"] ;
应返回一个数组,该数组包含可传递给
performsguewithidentifier
的所有可能序列值 对于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
}
您可以将其与此链接结合起来,以获取当前视图控制器的所有分段,并对每个分段进行验证。Sad。所以我唯一的选择就是捕获异常,如果它抛出。。。这不像苹果。我想用ios9重新评估这一点[尽管我的希望渺茫:D]似乎在别处得到了验证:-谢谢Rog!所有的赛格。