iPhone開發應用處理基本互動

來源:互聯網
上載者:User

iPhone開發應用處理基本互動是本文要介紹的內容,MVC:Model View controller 模型,視圖,控制器)目標:實現三類儘可能截然不同的代碼,編寫的任何對象都應該很明顯的劃分為哪一類,並且其功能大部分不屬於或者完全不屬於另外兩個類。

MVC可以協助確保實現最大的可重用性。

模型:儲存應用程式的資料的類。設計一些OBjective-C類來儲存應用程式的資料。

視圖:視窗、控制項和其他使用者可以看到並能與之互動的元素的組成部分。

控制器:將模型和視圖綁定在一起,確定如何處理使用者輸入的應用程式邏輯。由開發人員建立的類和特定於應用程式的類組成。

Classes檔案夾中的四個檔案:兩對.m和.h檔案)

IP_03buttonfunViewController將負責管理該視圖。

 
  1. #import <UIKit/UIKit.h> 
  2.  
  3. @interface IP_03buttonfunViewController : UIViewController {  
  4. }  
  5. @end 

這是UIViewController的子類。UIViewController局勢一個通用的控制器,他是UIKit的一部分)

IP_03buttonfunAppDelegate實現了應用程式委託。委託,負責為另外一個對象處理特定事情的類。通過應用程式委託,我們可以在預先定義的時間為UIApplication處理事情。

輸出口OutLet):

輸出口Outlet,是一個特殊的執行個體變數,控制器類可以使用他來引用nib中的對象。可以把輸出口看成是指向nib中的對象的指標。例如:假設在IB中建立一個文字標籤,需要在代碼中對該文字標籤進行修改操作,這時就需要聲明一個輸入口,並將其指向該標籤,這樣就可以通過改輸入口來修改該標籤了。

輸出口是使用關鍵字IBOutlet聲明的執行個體變數。

IBOutlet關鍵字的定義如下:

 
  1. #ifndef IBOutlet  
  2. #define IBoutlet  
  3. #endif 

對編譯器而言,IBoutlet並未執行任何操作,他僅僅是告訴IB,此執行個體變數將被串連到nib中的對象。

操作Action):

操作是控制器類中的方法,通過IBAction來聲明。該關鍵字告訴IB,此方法是一個操作,並且可以被某個控制項觸發。

操作的聲明如下:

 
  1. -IBAction)doSomething:id)sender; 

沒有任何傳回值。操作方法接受一個參數,該參數為id類型。名稱被制定為sender,觸發操作的控制項將使用sender參數引用其自身。

@property聲明:

在以前的操作中遇到這個問題一直沒有答案,今天在看這一章的時候,上面有詳細的講解,好好學學。

@property所聲明的是一些屬性。這也是Objective-C2.0的一個新特性。就想.NET中的set和get一樣。在Objective-C中添加屬性,通常會有設定屬性和檢索屬性,這中方法被成為存取方法和修改方法。例如下面的形式:

 
  1. -(id)foo //存取方法  
  2. {  
  3.     return foo;  
  4. }  
  5.  
  6. -(id)setFoo:(id)aFoo  
  7. {  
  8.     if(aFoo!=foo)  
  9.     {  
  10.        [aFoo retain];  
  11.        [foo release];  
  12.        foo = aFoo;  
  13.     }  

使用@property就告別了這種枯燥乏味的存取方法和修改方法。我們可以使用@property和@synthesize相結合,可以通知編譯器在編譯的時候建立擷取方法和設定方法。一下面的例子為例:

 
  1. @property retain,nonatomic) UILabel *statusText; 

其中的參數retain,通知編譯器向分配給此屬性的對象發送一個保留資訊,這樣不會從記憶體中清楚。這是必不可少的。因為預設行為assign需要與垃圾收集一起使用。垃圾收集在IPhone當前尚未使用。

第二個可選屬性nonatomic將更改存取方法和修改方法的產生方式。

Objective-C屬性還具有另外一個特性,呢就是點標記法。

 
  1. myVar = [someObject foo];或者myVar = someObject.foo;都是可以的  
  2. someObject.foo = myVar;等同於[someObject setFoo:myvar] 

得到Button的Title:

 
  1. NSString *title = [sender titleForState:UIControlStateNormal]; 

在請求按鈕的標題時我們要提供控制項的狀態,4種可能的狀態為:

a:正常normal)表示控制項處於活動狀態,但當前並未使用

b:反白highlighted)表示控制項正被按住或被使用

c:禁用disabled)表示按鈕未啟用且無法使用

d:以選中selected)僅特定控制項具有該狀態,表示控制項當前已被選中

 
  1. NSString *newText = [NSString stringWithFormat:@"%@ button pressed.",title]; 

等同於

 
  1. NSString *newText = [[NSString allac] initWithFormat:@"%@ button pressed.", title]; 

實現的功能相同但是第一種方法不建議用。第一種方法被成為簡便方法或Factory 方法,它將返回自動釋放的對象。在對象使用完成之後還會保留一段時間,浪費了記憶體,不建議使用。

[statusText release];既然我們沒有執行個體化該對象,為什麼還有release呢?

因為我們實現了各輸出口的屬性,並且為該屬性指定了retain參數,因此我們必須要釋放他。

建立例子:

開啟Xcode。File->New Project->Iphone Application->View-Based Application->IP_03buttonfun

修改IP_03buttonfunViewController.h成:

 
  1. #import <UIKit/UIKit.h> 
  2.  
  3. @interface IP_03buttonfunViewController : UIViewController {  
  4.  IBOutlet UILabel *statusText;  
  5. }  
  6. @property (retain,nonatomic) UILabel *statusText;  
  7. -(IBAction)buttonPressed:(id)sender;  
  8. @end 

修改IP_03buttonfunViewController.m成:

 
  1. #import "IP_03buttonfunViewController.h"  
  2.  
  3. @implementation IP_03buttonfunViewController  
  4. @synthesize statusText;  
  5.  
  6. -(IBAction)buttonPressed:(id)sender  
  7. {  
  8.  NSString *title=[sender titleForState:UIControlStateNormal];  
  9.  NSString *newText=[[NSString alloc]initWithFormat:@"%@ button pressed!",title];  
  10.  [statusText setText:newText];  
  11.  [newText release];  
  12. }  
  13.  
  14. - (void)didReceiveMemoryWarning {  
  15.     [super didReceiveMemoryWarning];  
  16. }  
  17.  
  18. - (void)dealloc {  
  19.  [statusText release];  
  20.     [super dealloc];  
  21. }  
  22. @end 

代碼建立完畢,現在可以關聯IB了。

拖兩個Button一個Label到View中。修改Button為Lift和Right,修改Label為空白並且調整適當的大小。

建立控制項完畢。

選中Button Lift,然後Apple+2,看到Touch Up inside後面的一個小圈圈,用鼠拖到File's Ouner上面。同理Button Right一樣的操作。

選中Label,Apple+2會看到statusText,和上面一樣拖到File's Ouner上。

程式完成,Build and go運行結果如下。

小結:iPhone開發應用處理基本互動的內容介紹完了,希望本文對你有所協助!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.