iPhone開發(fā)入門:實(shí)際開發(fā)中的應(yīng)用技巧
添加Action和Outlet
截至到現(xiàn)在,我們已經(jīng)會(huì)在InterfaceBuilder中用File'sOwner添加Action和Outlet,以及由WriteClassFiles生成應(yīng)用程序文件了。但是,如果在途中添加Action或者Outlet的時(shí)候,原先的Action會(huì)被覆蓋掉,我們不得不重新再用File'sOwner生成一遍。
這里,我們來看看左右不使用InterfaceBuilder,添加Action和Outlet的方法。
測試項(xiàng)目
我們先來創(chuàng)建一個(gè)測試用的項(xiàng)目UITest,其中利用File'sOwner添加一個(gè)Action和一個(gè)Outlet。

利用File'sOwner生成Action和Outlet
File'sOwner被選擇的狀態(tài)下點(diǎn)擊InterfaceBuilder的菜單的「WriteClassFiles...」,選擇Replace生成程序文件。
添加Outlet
Outlet被定義在ViewController的頭文件中。下面是模板項(xiàng)目的UITestViewController.h文件。

UITestViewController.h文件中的Outlet與Action定義
我們可以看到文件中Outlet和Action的定義。與其類似,在定義Outlet1的下面,我們再添加兩個(gè)Outlet。

添加Outlet
文件保存之后,我們可以通過File'sOwner來確認(rèn)是否添加成功:

確認(rèn)添加的Outlet
添加Action
同樣的方法,我們在UITestViewController.h中添加兩個(gè)Action。分別是myAction2,myAction3。

添加Action
保存之后用InterfaceBuilder的File'sOwner確認(rèn)。

確認(rèn)添加的Action
除此之外,Action需要在UITestViewController.m中定義其實(shí)現(xiàn)。

Action的實(shí)現(xiàn)
iPhone鍵盤
iPhone的鍵盤占去了整個(gè)屏幕的一半,所以基本上都是將TextField控件放置到畫面的上半部。如果需要在畫面下方輸入文字,需要另外生成一個(gè)View,其上半部是TextField控件。當(dāng)點(diǎn)擊下半部的控件時(shí),彈出該View。

iPhone鍵盤
關(guān)閉鍵盤的方法
鍵盤關(guān)閉通過「DidEndOnExit」Action。將其與TextField控件關(guān)聯(lián)。

與“DidEndOnExit”關(guān)聯(lián)
并且設(shè)定鍵盤右下角的按鍵為關(guān)閉按鈕。該按鈕缺省是「return」或者是換行,這里我們通過設(shè)定TextField控件的Attributes,將「ReturnKey」設(shè)定為「Done」,表示按下該按鈕激活上面的「DidEndOnExit」Action

設(shè)定ReturnKey

激活「DidEndOnExit」Action
關(guān)閉鍵盤的按鈕
上面使用的鍵盤中可以設(shè)定退出的按鈕,可是在「NumberPad」或者「PhonePad」中,右下角不存在這樣一個(gè)按鈕。如下圖:

NumberPad
這種情況下我們需要自定義一個(gè)按鈕,用來關(guān)閉鍵盤。如下圖所示,這里在TextField控件「右下角配置一個(gè)按鈕,并與「TouchDown」Action關(guān)聯(lián)。

如果想結(jié)束輸入鍵盤的輸入,使用與TextField關(guān)聯(lián)的Outlet來執(zhí)行以下的操作。
[outletendEditing:YES];

關(guān)聯(lián)按鈕與鍵盤
上面添加的按鈕只是在鍵盤出現(xiàn)的時(shí)候有效,所以我們試著將其與鍵盤關(guān)聯(lián)。只有在鍵盤出現(xiàn)的時(shí)候才出現(xiàn),否則不顯示。為了控制按鈕,我們需要生成按鈕的Outlet,通過它來控制按鈕的顯示和隱藏。
當(dāng)開始在TextField控件上輸入文字的時(shí)候,該按鈕有效。這時(shí)TextField控件的Action是「EditingDidBegin」,我們在其中將按鈕顯示出來(按鈕的Outlet變量為button_outlet)。
[button_outletsetHidden:NO];
接下來,按鍵按下的Action中追加按鈕隱藏的操作。
[button_outletsetHidden:YES];
另外,程序啟動(dòng)后,按鈕缺省的狀態(tài)也應(yīng)該是隱藏的狀態(tài)。在inspector選擇按鈕的「Drawing」屬性為「Hidden」。
透明按鈕
這里在介紹一種透明按鈕的方法。通過點(diǎn)擊TextField控件以外領(lǐng)域來關(guān)閉鍵盤。這在沒有位置用來設(shè)置按鈕時(shí)挺方便。其設(shè)置也非常簡單,在inspector選擇按鈕的「Type」屬性為「Custom」,這樣一來,就可以設(shè)置透明的按鈕。

設(shè)置按鈕
選擇了Custom,變成透明的按鈕會(huì)覆蓋View的上半部。

通過以上設(shè)置,就可以使用透明的按鈕了。但是有一點(diǎn)需要留意,設(shè)置了這樣的按鈕以后會(huì)覆蓋掉其領(lǐng)域下的其他控件,就不能觸發(fā)其他控件的消息了。所以需要將透明控件的顯示順序至于最低層。像下面選擇按鈕后,選擇InterfaceBuilder菜單的「Layout」→「SendBackward」后就可以了。

設(shè)置按鈕階層
確認(rèn)對話框
當(dāng)需要用戶確認(rèn)操作的時(shí)候,需要彈出確認(rèn)對話框。這里使用UIActionSheet。首先使用UIActionSheet的代理,利用Objective-C的protocol在UIViewController中處理。
@interfaceUITestViewController:UIViewController{
顯示對話框
在UITestViewController.m文件的myAction1中實(shí)現(xiàn)對話框顯示。
-(IBAction)myAction1:(id)sender
{
UIActionSheet*actionSheet=[[UIActionSheetalloc]initWithTitle:@"select"delegate:selfcancelButtonTitle:@"CANCEL"destructiveButtonTitle:@"OK"otherButtonTitles:nil];
[actionSheetshowInView:self.view];
[actionSheetrelease];
}
用戶操作
具體按鈕按下的時(shí)候,利用UIActionSheet的接口實(shí)現(xiàn)。
-(void)actionSheet:(UIActionSheet*)actionSheetclickedButtonAtIndex:(NSInteger)buttonIndex{
if(buttonIndex==0){
//destructiveButton被按下
}
}
數(shù)據(jù)保存
TextField控件中輸入的數(shù)據(jù)等應(yīng)用程序一結(jié)束就會(huì)自動(dòng)消失。如果下一次啟動(dòng)還想恢復(fù)的話怎么辦呢?這里可以使用類似于Windows的注冊表一類的方法。(這里只限于設(shè)置很少量的數(shù)據(jù),對于大的數(shù)據(jù)建議使用數(shù)據(jù)庫SQLite或Bento)
保存
[[NSUserDefaultsstandardUserDefaults]setObject:myObjforKey:@"myKey"];
myObj是被保存的數(shù)據(jù),myKey是以任意字符串。
提取
[[NSUserDefaultsstandardUserDefaults]valueForKey:@"myKey"];
myKey指定的數(shù)據(jù)被取出,放到myObj中。