アプリに次の設定があります。
UINavigationControllers が埋め込まれた、3 つのビューコントローラーを持つ UITabbarController。3 つのビューコントローラーは、すべてのビューコントローラーで使用される要素を実装し、コードの重複を防ぐために、「SVC」と呼ばれる UIViewController サブクラスから継承/スーパークラスを継承します。この「SVC」クラスでは、「dismissDelegate」というデリゲートをセットアップしました (これは、タブバー コントローラーがいつ閉じられるかを伝えるために使用されます)。
@protocol ModalViewDelegate <NSObject>
- (void)didDismissModalViewFrom:(UIViewController *)viewController;
@end
@property (weak, nonatomic) id <ModalViewDelegate> dismissDelegate;
UITabbarController に続く私の他のビューコントローラーは、タブバーコントローラーが閉じられたときに情報を取得するためにこのデリゲートを実装します。
SVC クラスは、次のようにデリゲートにタブバーの破棄を通知します。
[self.dismissDelegate didDismissModalViewFrom:self];
SVC クラス (すべてのタブバー ビュー コントローラー) から継承するすべてのビュー コントローラーのデリゲートをこのビュー コントローラーに設定したいと思います。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"ToTab"]) {
UITabBarController *tabBarController = segue.destinationViewController;
for (UINavigationController *navController in tabBarController.viewControllers) {
for (UIViewController *vc in navController.viewControllers) {
_SubclassVC = (SVC *) vc.superclass;
_SubclassVC.dismissDelegate = self;
}
}
}
}
しかし、次のエラーが表示されます。
+[SVC setDismissDelegate:]: unrecognized selector sent to class 0xbca68
私の質問:
- これは、このシナリオに取り組む正しい方法ですか (ViewController の却下に関する情報を取得し、複数の ViewController によって継承されるサブクラスでこのデリゲートをセットアップします)?
- 最初のビューコントローラーをタブバー (SVC クラス) のすべてのビューコントローラーのデリゲートとして設定するにはどうすればよいですか?