对于iOS 5中视图控制器之间的导航,UIViewController
类提供了[self performSegueWithIdentifier:@"MySegue" sender:sender]
选择器。大概在幕后,故事板实现知道从任何视图控制器发出的转场标识符列表,即[@"MySegue", @"MySegue2"]
。有没有办法以编程方式访问此列表,获取可以传递给performSegueWithIdentifier的标识符?
对于iOS 5中视图控制器之间的导航,UIViewController
类提供了[self performSegueWithIdentifier:@"MySegue" sender:sender]
选择器。大概在幕后,故事板实现知道从任何视图控制器发出的转场标识符列表,即[@"MySegue", @"MySegue2"]
。有没有办法以编程方式访问此列表,获取可以传递给performSegueWithIdentifier的标识符?
这是一个未经记录的行为,但是
NSArray *segueTemplates = [self valueForKey:@"storyboardSegueTemplates"] ;
应该返回包含所有可能的segue值的数组,这些值可以传递给performSegueWithIdentifier
。目前没有公共API来枚举storyboard中的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
}
将与视图控制器相关的所有segue
存储到一个数组中,然后在视图控制器中访问此数组。