一个关于 UIViewController
的分类,它会自动将 -prepareForSegue:sender:
调用路由到基于 segue 标识符的显式方法。
所以,您不需要这样做
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"Show Settings"]) {
// prepare for 'Show Settings' segue
} else if ([segue.identifier isEqualToString:@"Show User Info"]) {
// prepare for 'Show User Info' segue
} else if ([segue.identifier isEqualToString:@"Show About"]) {
// prepare for 'Show About' segue
}
}
您可以这样写
- (void)prepareForShowSettingsSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// prepare for 'Show Settings' segue
}
- (void)prepareForShowUserInfoSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// prepare for 'Show User Info' segue
}
- (void)prepareForShowAboutSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// prepare for 'Show About' segue
}
有一个快捷方式可以将目标视图控制器作为属性注入到调用控制器中。这对于嵌入式 segue 特别有用,因为您不能有一个指向您的子视图控制器的 outlet。
为此,您将 segue 的标识符设置为以下格式: @connect(<#myProperty#>)
。例如,具有标识符 @connect(someChildViewController)
的 segue 将其 destinationViewController
保存到调用视图控制器的 someChildViewController
属性中。
您可以在进行 segue 时提供配置块。
- (IBAction)showSettings:(id)sender {
[self knm_performSegueWithIdentifier:@"Show Settings" sender:sender configureUsingBlock:(UIStoryboardSegue *segue) {
// prepare for 'Show Settings' segue
}];
}
当使用 Cocoapods 时,将以下内容添加到您的 Podfile
pod 'KNMSegueRouting', '~> 0.3'
然后,在您的应用程序目标的构建设置中,在 Additional Linker Flags
下添加 -ObjC
以识别分类。
在您的视图控制器中,只需添加以下模式的方法来处理您的 segue
- (void)prepareFor<SymbolifiedSegueIdentifier>Segue:(UIStoryboardSegue *)segue sender:(id)sender {
// handle your segue here
}
表示 segue 名称的规则如下
A-Z
,a-z
,0-9
和 _
(以任何顺序和组合)因此,具有标识符 some overly-complicated identifier_name 2
的 segue 成为 SomeOverlyComplicatedIdentifier_name2
,并将其路由到 -prepareForSomeOverlyComplicatedIdentifier_name2Segue:sender:
处理具有标识符 Present Login
的 segue
- (void)prepareForPresentLoginSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// prepare for 'Present Login'
}
处理具有标识符 push-user-page
的 segue
- (void)prepareForPushUserPageSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// prepare for 'push-user-page'
}
要配置要执行的 segue,请使用 -knm_performSegueWithIdentifier:sender:configureUsingBlock:
- (IBAction)showSettings:(id)sender {
[self knm_performSegueWithIdentifier:@"Show Settings" sender:sender configureUsingBlock:(UIStoryboardSegue *segue) {
// prepare for 'Show Settings' segue
}];
}
配置块在调用任何 -perform<MyIdentifier>Segue:sender:
方法之前执行。
-prepareForSegue:sender:
中的自定义逻辑此类别覆盖了 -prepareForSegue:sender:
以实现路由。如果您出于某种原因需要在您的视图控制器中覆盖此方法但仍需要路由行为,您需要确保调用 [super prepareForSegue:segue sender:sender]
。