UISegmentControllで画面を切り替える方法
やりたいこと
本来の用途と違うのかもしれませんが、Segment Controlを切り替えるタイミングで別のViewControllerを呼び出すというもの。
Viewを配置しておいて、Segment ControlをかえるとViewの中身だけ変わるような画面のイメージです。
実装
1. SegmentControlを追加する
まずは、Main.StoryBoardにSegmentControlとViewを追加する
こんな感じで、グレーの部分がViewです。
2. UIViewControllerを追加する
SegmentControlを切り替えた時に表示するViewContollerをそれぞれ作成します。xivファイルも同時に作成します
ここでは、それぞれFirstViewController、SecondViewControllerとします。
3. ViewController.h(呼び出し元)を編集する
ViewController.h
#import <UIKit/UIKit.h> @interface ViewController : UIViewController { NSArray *viewControllers; UIViewController * currentViewController; } @property (weak, nonatomic) IBOutlet UIView *view; @property (weak, nonatomic) IBOutlet UISegmentedControl *segment; @end
viewとsegmentはStoryBoardからドラックアンドドロップしたもので、StoryBoardとソースコードを結びつけています
4. ViewController.m(呼び出し元)を編集する
ViewController.m
#import "ViewController.h" #import "FirstViewController.h" //追加 #import "SecondViewController.h" //追加 @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. [self setUpViewControllers]; [self.segment addTarget:self action:@selector(segmentChanged) forControlEvents:UIControlEventValueChanged]; self.navigationItem.titleView = self.segment; self.segment.selectedSegmentIndex = 0; [self segmentChanged]; [self.view addSubview:self.segment]; } - (void) segmentChanged { if(currentViewController) { [currentViewController.view removeFromSuperview]; } UIViewController *vc = [viewControllers objectAtIndex:self.segment.selectedSegmentIndex]; [self.myView addSubview:vc.view]; [vc didMoveToParentViewController:self]; [currentViewController removeFromParentViewController]; currentViewController = vc; } - (void)setUpViewControllers{ FirstViewController *firstViewController = [[FirstViewController alloc]initWithNibName:@"FirstViewController" bundle:nil]; SecondViewController *secondViewController = [[SecondViewController alloc]initWithNibName:@"SecondViewController" bundle:nil]; viewControllers = [NSArray arrayWithObjects:firstViewController,secondViewController,nil]; }
こんなかんじで簡単に実装できました。
さいごに
まだあんまりわかってないんですけど、ファイルを分けることで見通しがよくなることと、後でうまくやれば再利用できるかもしれないというメリットもあるのかなぁとおもいます。
以上です