iOS
Storyboard
xcode5

Containerとの値やり取り方法

More than 5 years have passed since last update.

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;
}
}

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