UI 基礎之-----delegate, 自定義視圖

delegate


- (BOOL)textFieldShouldReturn:(UITextField*)textField{

    [ textField resignFirstResponder];

   returnYES;

}

程序的啓動流程

1⃣  main 函數是程序入口

int main(int argc,char * argv[]){

@autoreleasepool{

 return UIApplicationMain(argc,argv,nil,NSStringFromClass([

  AppDelegate class]));

}

}

執行 UIApplicationMain函數時做了跳轉,轉到 AppDelete

 

2⃣  UIApplicationMain在程序入口函數 main 函數中調用,主要實現了3個功能:

①創建應用程序(UIApplication)實例

②創建應用程序代理實例,代理的主要作用是,監聽應用程序是如何執行的.

③建立時間循環(runloop: 死循環,不斷檢測程序運行狀態,是否被觸摸,晃動等)不斷的監聽,直到程序退出爲止.

 

3⃣  UIApplicationMain 剖析

 int UIApplicationMain(

int argc;

char *argv[];

NSString *principalClassName;

NSString *delegateClassName;

)

principalClassName:應用程序對象的類名(UIApplication 或其子類)

delegateClassName:應用程序 delegate 的類名.(任何接受了 UIApplicationDelegate 的類)

UIApplicationMain根據上述兩個類名創建應用程序實例,應用程序代理實例,然後建立事件循環(runloop),檢測程序的各種事件(程序開始啓動,接收到觸摸等等)

4⃣ 應用程序代理,主要檢測應用程序的狀態並做出相應的處理.

應用程序的狀態有很多,比如:程序啓動,進入活躍狀態,進到後臺,內存警告,收到遠程消息

任何接受了 UIApplicationDelegate協議的對象都可以成爲應用程序代理

一旦應用程序的某種狀態觸發,就會執行相應的代理方法.

5⃣ UIApplicationDelegate 是一個 OC 的協議.裏面聲明瞭一堆方法,這些方法都與應用程序運行狀態有關,它們由應用程序代理實現. UIApplication 對象負責調用.

6⃣ UIApplicationDelegate 中的方法:

①- (BOOL)application: (UIApplication*)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions{}

告訴 delegate 程序啓動即將完成,程序準備要運行.(delegate 實現這個方法時,要創建 window 對象,將程序內容通過 window 呈現給用戶)

②- (void)applicationDidBecomeActive:(UIApplication *)application{}

告訴 delegate 應用程序已經進入活躍狀態,(重新執行被暫停的任務)

③- (void)applicationWillResignAction:(UIApplication *)application{}

告訴代理程序即將進入非活躍狀態,(暫停遊戲,停止 timer 等)

④- (void)applicationDidEnterBackground:(UIApplication *)application{}

告訴 delegate 應用程序已經進入到了後臺,(存儲用戶數據,釋放一些共享資源,停止 timer 等)

⑤- (void)applicationWillEnterForeground:(UIApplication *)application{}

    告訴delegate 應用程序即將進入前臺(取消所有進入後臺時暫停的任務)

7⃣ 查看各個代理的執行順序.

使用 NSLog(@”%@”,__FUNCTION__,__LINK__);

  自定義視圖

就是將一些簡單的控件進行組合,編寫出符合自己需求的控件.

要做到(可複用,可移植,可精煉)

在自定義控件的時候,可以將控件封裝到一個類中,進行調用顯示.

下面的是一個 LTVIEW 類控件:

1⃣ 首先在. H 文件中需要定義兩個實例變量

@proterty (retain,nonatomic)UILable *label;

@proterty (retain,nonatomic)UITextField *field;

2⃣ 在. M 文件中封裝控件

-  (void)dealloc{

[_textField release];

[_lable release];

[super dealloc];

}

重寫 UIView 的初始化方法

-  (id)initWithFrame:(CGRect)frame{

  self = [super initWithFrame:frame];

  if(self){

  [self p_setUp];

    }

return self;

}

創建方法

- (void)p_setUp{

 _label = [[UILabelalloc]initWithFrame:CGRectMake(0, 0, self.frame.size.width/3, self.frame.size.height)];

    _label.backgroundColor = [UIColoryellowColor];

    [selfaddSubview:_label];

    [_labelrelease];

   

    _textField = [[UITextFieldalloc]initWithFrame:CGRectMake(_label.frame.size.width, 0, self.frame.size.width*2/3, self.frame.size.height)];

    _textField.backgroundColor = [UIColorredColor];

    [selfaddSubview:_textField];

    [_textFieldrelease];

}
調用方法:首先引入頭文件
// 使用自定義的視圖類
    LTView *view = [[LTView alloc]initWithFrame:CGRectMake(10, 20, 300, 40)];
    view.backgroundColor = [UIColor whiteColor];
    [self.window addSubview:view];
    [view release];

四  視圖控制器

1. 視圖控制器的作用:

1⃣響應事件

2⃣分擔 AppDelegate 的工作

3⃣實現模塊獨立,提高複用性

2.  創建 UIViewController 對象

UIViewController*control = [[UIViewController alloc]init];

UIViewController,自身帶了一個UIView, 默認的大小和屏幕的大小一樣

每個 window 都帶有一個根視圖,如果不給根視圖,默認根視圖就是它本身

設置 self.window 的跟視圖控制器

self.window.rootViewController= control;

設置控制器的背景顏色

control.view.backgroundColor= [UIColor yellowColor];

設置按鈕添加的時候;[control.view addSubview:button];

3.  使用自定義視圖控制器進行操作

MyViewController*control = [[MyViewController alloc]init];

將根視圖控制器設置爲 control

self.window.rootViewController= control;

[controlrelease];

控制器內容如下圖所示:

出事話方法和加載視圖:

實現視圖加載的方法:


內存處理的方法:

重寫 didReceiveMemoryWarning方法:

-  (void)didReceiveMemoryWarning{

[superdidReceiveMemoryWarning];

//根視圖已經加載過,根視圖未顯示

if([selfisViewLoaded] == YES && self.view.window == nil)

{

//將根視圖銷燬

self.view= nil;

}

}

4.  創建旋轉視圖控制器

RotationViewController*rotation = [[RotationViewController alloc]init];

將根視圖設置爲 rotation

self.window.rootViewController= rotation;

[rotationrelease];

控制器視圖加載視圖的實現:

屏幕旋轉檢測:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章