0

アプリに次の設定があります。

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

私の質問:

  1. これは、このシナリオに取り組む正しい方法ですか (ViewController の却下に関する情報を取得し、複数の ViewController によって継承されるサブクラスでこのデリゲートをセットアップします)?
  2. 最初のビューコントローラーをタブバー (SVC クラス) のすべてのビューコントローラーのデリゲートとして設定するにはどうすればよいですか?
4

1 に答える 1