2011年11月28日 星期一

iOS - Training (7) - Controller

Controller-UI 連結 -----
在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開發入門》

沒有留言:

張貼留言