UIViewController
Description
The UIViewController class provides the fundamental view-management model for all iOS apps. You rarely instantiate UIViewController objects directly. Instead, you instantiate subclasses of the UIViewController class based on the specific task each subclass performs. A view controller manages a set of views that make up a portion of your app’s user interface. As part of the controller layer of your app, a view controller coordinates its efforts with model objects and other controller objects—including other view controllers—so your app presents a single coherent user interface.UIViewControllerクラスは全てのiOSアプリの基礎的なview-managementモデルを提供する。UIViewControllerオブジェクトのインスタンスを直接生成することは少ない。代わりに、それぞれの役割を持つUIViewControllerクラスのサブクラスからインスタンスを生成する。viewコントローラーは、アプリのユーザーインターフェースの一部を担うviewの集まりを管理する。アプリのコントローラーレイヤーの一部として、viewコントローラーは、モデルオブジェクトや他のコントローラーのオブジェクト(他のviewコントローラーのオブジェクトも含む)との調整を行う。そのため、アプリは一貫したユザーインターフェースを持つことができる。
Availability
iOS (2.0 and later)Declared
UIViewController.hReference
UIViewController Class ReferenceGuides
View Controller Catalog for iOS, View Controller Programming Guide for iOSSamples
AdvancedURLConnections, NavBar, Tabster, UICatalog, iAdSuiteUIViewControllerの役割
画面の構成要素をひとまとめにして切り替えることが可能
簡単な2画面遷移の例
- UIViewControllerクラスのViewを2つ用意し、AppDelegate.mであらかじめ2つとも追加しておく
- [self.window bringSubviewToFront:viewController1.view]で最初にviewController1を全面に表示
- UIViewControllerクラスのViewはviewプロパティで参照できる
- ボタンをタッチした時に呼ばれる[self.view.window sendSubviewToBack:self.view]で自身のViewを背面に隠すことで、もう一つのViewを画面に表示
#import@interface StudyAppDelegate : UIResponder { //UIViewControllerクラスのViewを用意 UIViewController* viewController1; UIViewController* viewController2; } @property (strong, nonatomic) UIWindow *window; @end
#import "StudyAppDelegate.h" #import "ViewController1.h" #import "ViewController2.h" @implementation StudyAppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; viewController1 = [[ViewController1 alloc] init]; viewController2 = [[ViewController2 alloc] init]; [self.window addSubview:viewController1.view]; [self.window addSubview:viewController2.view]; //最初にviewController1を前面に表示 [self.window bringSubviewToFront:viewController1.view]; [self.window makeKeyAndVisible]; return YES; }
#import@interface ViewController1 : UIViewController @end
#import "ViewController1.h" @interface ViewController1 () @end @implementation ViewController1 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } - (void)viewDidLoad { [super viewDidLoad]; //ラベルの作成 UILabel* label = [[UILabel alloc] initWithFrame:self.view.bounds]; label.text = @"Hello, World"; label.textAlignment = UITextAlignmentCenter; label.backgroundColor = [UIColor whiteColor]; label.textColor = [UIColor blackColor]; label.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; [self.view addSubview:label]; //ボタンの作成 UIButton* button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; [button setTitle:@"画面遷移1" forState:UIControlStateNormal]; [button sizeToFit]; CGPoint newPoint = self.view.center; newPoint.y += 50; button.center = newPoint; button.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin; [button addTarget:self action:@selector(buttonDidPush) forControlEvents:UIControlEventTouchUpInside]; //ボタンのターゲットアクション [self.view addSubview:button]; } //ボタンをタッチしたときのアクション - (void)buttonDidPush { [self.view.window sendSubviewToBack:self.view]; //自身のViewを背面に移動 } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
#import@interface ViewController2 : UIViewController @end
#import "ViewController2.h" @interface ViewController2 () @end @implementation ViewController2 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } - (void)viewDidLoad { [super viewDidLoad]; UILabel* label = [[UILabel alloc] initWithFrame:self.view.bounds]; label.text = @"こんばんわ、世界"; label.textAlignment = UITextAlignmentCenter; label.backgroundColor = [UIColor blackColor]; label.textColor = [UIColor whiteColor]; label.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; [self.view addSubview:label]; UIButton* button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; [button setTitle:@"画面遷移2" forState:UIControlStateNormal]; [button sizeToFit]; CGPoint newPoint = self.view.center; newPoint.y += 50; button.center = newPoint; button.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin; [button addTarget:self action:@selector(buttonDidPush) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:button]; } - (void)buttonDidPush { [self.view.window sendSubviewToBack:self.view]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
コメント