在iOS中為了連結Controller與UI之間的關係,可以透過
- Xib裡的File's Owner來連結二者
- 直接在Controller中撰寫程式來實現介面。
Xib裡的File's Owner來連結二者
開啓一個繼承UIViewController的類別,並也產生一個Xib檔(可由IDE勾選一同產生)。點選Xib檔並選擇Placeholders裡的File's Owner,在右邊的Identity Inspector中的Custom Class裡設定與之連結的Class,這裡選擇剛開啓的UIViewController類別,而完成上述的Controller-UI連結(若File's Owner的Connection Inspector裡的Outlets沒與Placeholder中的Object裡的view作連結,需在這裡自行連結)。
上述只完成了Controller-UI二者的連結,但主畫面並無與此view作連結。所以需在Delegate中的didFinishLaunchingWithOptions方法實體化Controller。
#import "MyController.h" //需import繼承UIViewController的類別 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { MyController* myCon = [[MyController alloc] initWithNibName:@"MyController" bundle:nil]; self.window.rootViewController = myCon; //將Controller放入主畫面中 //[myCon release]; //沒使用ARC機制時需自行釋放記憶體 [self.window makeKeyAndVisible]; return YES; } |
直接在Controller中撰寫程式來實現介面
開啓一個繼承UIViewController的類別,但這裡不需產生Xib檔,而是覆寫UIViewController中的loadView方法。
-(void)loadView { UIView* myView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 480.0)]; UILabel* myLabel = [[UILabel alloc] initWithFrame:CGRectMake(50, 50, 120, 40)]; myLabel.text = @"Hello View"; [myView addSubview:myLabel]; // [myLabel release]; self.view = myView; // [myView release]; } |
再來在主畫面中實體化Controller
#import "MyController.h" //需import繼承UIViewController的類別 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. MyController* myCon = [[MyController alloc] init]; //因為由程式來實現介面,故不用加入Xib檔名 self.window.rootViewController = myCon; // [myCon release]; [self.window makeKeyAndVisible]; return YES; } |
UIViewController 生命週期 -----
-----
UIView 事件傳遞-----
故當A_UIView蓋在B_UIView上時,若A_UIView的Inspector裡的View設定項中的Interaction "User Interaction Enabled"打勾,表示此UIView會被使用者事件觸發,B_UIView不會被使用者事件所觸發;若A_UIView取消打勾,B_UIView同樣選項有打勾的話,B_UIView就會觸發事件。
-----
資料出處《Object-C與iOS開發入門》
沒有留言:
張貼留言