iPhone開發入門:實際開發中的應用技巧

來源:互聯網
上載者:User

添加Action和Outlet

截至到現在,我們已經會在InterfaceBuilder中用File'sOwner添加Action和Outlet,以及由WriteClassFiles產生應用程式檔案了。但是,如果在途中添加Action或者Outlet的時候,原先的Action會被覆蓋掉,我們不得不重新再用File'sOwner產生一遍。

這裡,我們來看看左右不使用InterfaceBuilder,添加Action和Outlet的方法。

測試專案

我們先來建立一個測試用的項目UITest,其中利用File'sOwner添加一個Action和一個Outlet。

利用File'sOwner產生Action和Outlet

File'sOwner被選擇的狀態下點擊InterfaceBuilder的菜單的「WriteClassFiles...」,選擇Replace產生程式檔案。

添加Outlet

Outlet被定義在ViewController的標頭檔中。下面是模板項目的UITestViewController.h檔案。

UITestViewController.h檔案中的Outlet與Action定義

我們可以看到檔案中Outlet和Action的定義。與其類似,在定義Outlet1的下面,我們再添加兩個Outlet。

添加Outlet

檔案儲存之後,我們可以通過File'sOwner來確認是否添加成功:

確認添加的Outlet

添加Action

同樣的方法,我們在UITestViewController.h中添加兩個Action。分別是myAction2,myAction3。

添加Action

儲存之後用InterfaceBuilder的File'sOwner確認。

確認添加的Action

除此之外,Action需要在UITestViewController.m中定義其實現。

Action的實現

iPhone鍵盤

iPhone的鍵盤佔去了整個螢幕的一半,所以基本上都是將TextField控制項放置到畫面的上半部。如果需要在畫面下方輸入文字,需要另外產生一個View,其上半部是TextField控制項。當點擊下半部的控制項時,彈出該View。

iPhone鍵盤

關閉鍵盤的方法

鍵盤關閉通過「DidEndOnExit」Action。將其與TextField控制項關聯。

與“DidEndOnExit”關聯

並且設定鍵盤右下角的按鍵為關閉按鈕。該按鈕預設是「return」或者是換行,這裡我們通過設定TextField控制項的Attributes,將「ReturnKey」設定為「Done」,表示按下該按鈕啟用上面的「DidEndOnExit」Action

設定ReturnKey

啟用「DidEndOnExit」Action

關閉鍵盤的按鈕

上面使用的鍵盤中可以設定退出的按鈕,可是在「NumberPad」或者「PhonePad」中,右下角不存在這樣一個按鈕。如:

NumberPad

這種情況下我們需要自訂一個按鈕,用來關閉鍵盤。如所示,這裡在TextField控制項「右下角配置一個按鈕,並與「TouchDown」Action關聯。

如果想結束輸入鍵盤的輸入,使用與TextField關聯的Outlet來執行以下的操作。

[outletendEditing:YES];

關聯按鈕與鍵盤

上面添加的按鈕只是在鍵盤出現的時候有效,所以我們試著將其與鍵盤關聯。只有在鍵盤出現的時候才出現,否則不顯示。為了控制按鈕,我們需要產生按鈕的Outlet,通過它來控制按鈕的顯示和隱藏。

當開始在TextField控制項上輸入文字的時候,該按鈕有效。這時TextField控制項的Action是「EditingDidBegin」,我們在其中將按鈕顯示出來按鈕的Outlet變數為button_outlet)。

[button_outletsetHidden:NO];

接下來,按鍵按下的Action中追加按鈕隱藏的操作。

[button_outletsetHidden:YES];

另外,程式啟動後,按鈕預設的狀態也應該是隱藏的狀態。在inspector選擇按鈕的「Drawing」屬性為「Hidden」。

透明按鈕

這裡在介紹一種透明按鈕的方法。通過點擊TextField控制項以外領域來關閉鍵盤。這在沒有位置用來設定按鈕時挺方便。其設定也非常簡單,在inspector選擇按鈕的「Type」屬性為「Custom」,這樣一來,就可以設定透明的按鈕。

設定按鈕

選擇了Custom,變成透明的按鈕會覆蓋View的上半部。

通過以上設定,就可以使用透明的按鈕了。但是有一點需要留意,設定了這樣的按鈕以後會覆蓋掉其領域下的其他控制項,就不能觸發其他控制項的訊息了。所以需要將透明控制項的顯示順序至於最低層。像下面選擇按鈕後,選擇InterfaceBuilder菜單的「Layout」→「SendBackward」後就可以了。

設定按鈕階層

確認對話方塊

當需要使用者確認操作的時候,需要彈出確認對話方塊。這裡使用UIActionSheet。首先使用UIActionSheet的代理,利用Objective-C的protocol在UIViewController中處理。

@interfaceUITestViewController:UIViewController{

顯示對話方塊

在UITestViewController.m檔案的myAction1中實現對話方塊顯示。

-(IBAction)myAction1:(id)sender

{

UIActionSheet*actionSheet=[[UIActionSheetalloc]initWithTitle:@"select"delegate:selfcancelButtonTitle:@"CANCEL"destructiveButtonTitle:@"OK"otherButtonTitles:nil];

[actionSheetshowInView:self.view];

[actionSheetrelease];

}

使用者操作

具體按鈕按下的時候,利用UIActionSheet的介面實現。

-(void)actionSheet:(UIActionSheet*)actionSheetclickedButtonAtIndex:(NSInteger)buttonIndex{

if(buttonIndex==0){

//destructiveButton被按下

}

}

資料儲存

TextField控制項中輸入的資料等應用程式一結束就會自動消失。如果下一次啟動還想恢複的話怎麼辦呢?這裡可以使用類似於Windows的註冊表一類的方法。這裡只限於設定很少量的資料,對於大的資料建議使用資料庫SQLite或Bento)

儲存

[[NSUserDefaultsstandardUserDefaults]setObject:myObjforKey:@"myKey"];

myObj是被儲存的資料,myKey是以任一字元串。

提取

[[NSUserDefaultsstandardUserDefaults]valueForKey:@"myKey"];

myKey指定的資料被取出,放到myObj中。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.