Containerとの値やり取り方法


ViewControllerとCotainerViewの値やり取り方法に関して考察します。
完全に分離して表示や処理をする場合は問題ないですが、連携して操作する場合は値や状態のやり取りが必要になります。そこで以下のような方法でやり取りを実装しました。

  1. ContainerViewでdelegateを作成(SubViewDelegateとします)
  2. MainViewControllerでSubViewDelegateを実装します

そうすると、値のやり取りが可能です。

SubViewController.h
@protocol SubViewController

@required
- (void)testValue:(NSString *)testPhrase;
@end

@interface SubViewController : UIViewController

// ------- delegate --------
@property (weak, nonatomic) id<SubViewController> delegate;

...

@end
MainViewController.m

@interface MainViewController ()
<
SubViewController
>

@end

@implementation MainViewController

- (void)testValue:(NSString *)testPhrase{
...
}

@end

ここではまったのがdelegate=selfをどこに書くかです。
自分の思うような動作は、viewDidLoadに書いた場合実現できませんでした。。。
そこで、Storyboard上でContainerとのsegueにid名をつけて

MainViewController.m

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
   if ([segue.identifier isEqualToString:@"subViewSegue"]) {
        SubViewController *subView = segue.destinationViewController;
         subView.delegate = self;
   }
}

とするとうまく動作しました。