1つの画面の上下で同じViewControllerを使う方法(addChildViewController)
- 1つの画面(A-ViewController)の上下にImageViewとスライダーを表示し、 同じ処理をさせる必要があった
- 画面上に2つずつUIImageViewとUISliderを配置して制御してもいいけど、同じことするのは面倒
- 同じ処理なので1つのViewController(UIImageViewとUISliderを持った)を作成(MovieVCとする)
- 大元の画面(A-ViewController)で、上下に作成したMovieVCを呼べばいいのでは?
- Container ViewController?
テスト用にMovieViewはWebを表示するようにして、作成してみた。こんな感じ。
StoryBoardは、こんな感じで設定。
大元の画面(A-ViewController)
.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
| // MovieVCをインポート
#import "MovieViewController.h"
@interface DetailViewController ()
// 画面の上下にUIViewを配置して接続
@property (weak, nonatomic) IBOutlet UIView *upperView;
@property (weak, nonatomic) IBOutlet UIView *lowerView;
// MovieVCのプロパティを用意
@property (nonatomic) MovieViewController *upperMovieVC;
@property (nonatomic) MovieViewController *lowerMovieVC;
@end
@implementation DetailViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// MovieVCのインスタンスを生成([MovieViewController new]ではダメ)
_upperMovieVC = [self.storyboard instantiateViewControllerWithIdentifier:@"MovieScene"];
_lowerMovieVC = [self.storyboard instantiateViewControllerWithIdentifier:@"MovieScene"];
// 自身のVCの子とする
[self addChildViewController:_upperMovieVC];
[self addChildViewController:_lowerMovieVC];
// 用意してあるUIViewに生成した子(MovieVC)のviewを追加
[_upperView addSubview:_upperMovieVC.view];
[_lowerView addSubview:_lowerMovieVC.view];
// 子に追加した旨を通知
[_upperMovieVC didMoveToParentViewController:self];
[_lowerMovieVC didMoveToParentViewController:self];
// テストのために用意したMovieVCのメソッドに違うURLを渡す
[_upperMovieVC connectURL:@"http://google.co.jp"];
[_lowerMovieVC connectURL:@"http://yahoo.co.jp"];
}
@end
|
MovieVC
.h
1
2
3
| @interface MovieViewController : UIViewController<UIWebViewDelegate>
- (void)connectURL:(NSString *)urlString;
@end
|
.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| - (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"MovieView viewDidLoad");
}
- (void)connectURL:(NSString *)urlString
{
NSURL *url = [NSURL URLWithString:urlString];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
_webView.delegate = self;
[_webView loadRequest:request];
}
- (void)willMoveToParentViewController:(UIViewController *)parent
{
NSLog(@"MovieVC");
}
|