@interfaceSimpleT" />

日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

【一步一步學(xué)IOS5 】 處理UITableView中的行選擇

系統(tǒng) 2635 0

下面,我們將嘗試對(duì)先前的demo做如下變化:

?

(1)當(dāng)用戶點(diǎn)擊一行時(shí),顯示一個(gè)提醒消息

?

(2)當(dāng)用戶選擇了一行時(shí),顯示一個(gè)選中的標(biāo)志

?

1.理解UITableViewDelegate

?

在我們創(chuàng)建Simple Table View 應(yīng)用程序時(shí),我們?cè)赟impleTableController.h 中定義了2個(gè)委托(UITableViewDelegate 和 UITableViewDataSource):

?

#import<UIKit/UIKit.h>

?

@interface SimpleTableViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>

?

@end

?

2個(gè)委托在Object-C 中稱為協(xié)議(protocol). 當(dāng)創(chuàng)建了UITableView,你必須遵守這些協(xié)議中定義的要求。

?

在IOS編程中,遇到不同的委托是非常常見(jiàn)的。每一個(gè)委托負(fù)責(zé)特定的角色或任務(wù),保持系統(tǒng)的簡(jiǎn)潔。任何時(shí)候在一個(gè)對(duì)象需要完成特定任務(wù)時(shí),它依賴于另外一個(gè)對(duì)象去負(fù)責(zé)處理。這個(gè)在系統(tǒng)設(shè)計(jì)領(lǐng)域通常稱為關(guān)注點(diǎn)分離(Separation of Concern).

?

當(dāng)你分析UITableView 類時(shí),它也應(yīng)用了這一設(shè)計(jì)概念。這2個(gè)委托迎合了不同的目標(biāo)。我們實(shí)現(xiàn)的UITableViewDataSource 委托定義了方法,用來(lái)顯示表數(shù)據(jù);另一方面,UITableViewDelegate 委托則負(fù)責(zé)處理 UITableView界面和行選擇。

?

顯然,我們將使用UITableViewDelegate委托,來(lái)實(shí)現(xiàn)處理行選擇的方法。

?

2.處理表視圖行選擇(Table Row Selection)

?

在更改代碼之前,我們需要知道:

?

我們?cè)趺粗繳ITableViewDelegate中的哪一個(gè)方法需要實(shí)現(xiàn)?

?

你需要參考Apple的iOS programming reference 文檔,有2種方法可以訪問(wèn)該文檔。你可以選擇Apple網(wǎng)站的API文檔,或者直接在Xcode 中查詢。

?

如果讀完文檔,你將發(fā)現(xiàn)如下方法用來(lái)管理行選擇:

?

- tableView:willSelectRowAtIndexPath:

- tableView:didSelectRowAtIndexPath:

?

2個(gè)方法都用于行選擇。唯一的區(qū)別是:在行將要選擇的時(shí)候,調(diào)用willSelectRowAtIndexPath方法。通常,你可以使用這個(gè)方法來(lái)阻止選定特定的行。一般情況下,你使用didSelectRowAtIndexPath 方法,在用戶選擇一行時(shí),調(diào)用這個(gè)方法去負(fù)責(zé)行選擇。在這個(gè)方法里面,添加代碼來(lái)指定具體業(yè)務(wù)行為,在行選擇的時(shí)候調(diào)用。

?

在本例子中,我們將添加一些動(dòng)作來(lái)處理行選擇:

?

1)顯示警告消息

2)顯示一個(gè)勾選標(biāo)志,表示改行已經(jīng)選擇

?

3.coding start!

?

現(xiàn)在我們解釋足夠清楚了,接下來(lái)開(kāi)始進(jìn)入有趣的部分 - code, code, code !

?

在Xcode 中,打開(kāi) SimpleTableViewController.m? 文件, 在@end 指令之前添加如下方法:

?

?

- ( void )tableView:( UITableView *)tableView didSelectRowAtIndexPath:( NSIndexPath *)indexPath

{

? ? UIAlertView *messageAlert = [[ UIAlertView alloc ] initWithTitle : @" 行選擇 " message : @" 你已經(jīng)選擇一行! " delegate: nil cancelButtonTitle : @" 確定 " otherButtonTitles: nil ];

? ? [messageAlert show ];

}

?

代碼非常容易理解。在選擇一行時(shí),App 創(chuàng)建一個(gè) UIAlertView 對(duì)象,并彈出一個(gè)警告消息。再次運(yùn)行App,當(dāng)你輕拍一行時(shí),App顯示如下圖所示:

?


【一步一步學(xué)IOS5 】 處理UITableView中的行選擇

?

下面是改進(jìn)之后的中文菜單顯示效果圖:

?


【一步一步學(xué)IOS5 】 處理UITableView中的行選擇

?

?

我們修改代碼入下

?

?

- ( void )tableView:( UITableView *)tableView didSelectRowAtIndexPath:( NSIndexPath *)indexPath

{

? ? NSString *message = [ tableData objectAtIndex :indexPath. row ];

? ? UIAlertView *messageAlert = [[ UIAlertView alloc ] initWithTitle : @" 行選擇 " message :message delegate : nil cancelButtonTitle : @" 確定 " otherButtonTitles : nil ];

? ? [messageAlert show ];

}



這樣填出框就會(huì)顯示菜譜的名字了


【一步一步學(xué)IOS5 】 處理UITableView中的行選擇
?

接著,我們將添加一些代碼,顯示所選擇行的標(biāo)志。在開(kāi)始之前,讓我們看看一個(gè)表格單元格默認(rèn)內(nèi)容:


【一步一步學(xué)IOS5 】 處理UITableView中的行選擇
?
一個(gè)單元格分為3部分:

圖像(縮略圖) - 左側(cè)部分保留顯示縮略圖,就像我們之前在Simple Table 應(yīng)用程序中實(shí)現(xiàn)的一樣

內(nèi)容 - 主要部分用來(lái)顯示文本標(biāo)簽和相信內(nèi)容

附件視圖 (Accessory View) - 右側(cè)部分保留為附件視圖。 有3類默認(rèn)的附件視圖,包括 Disclosure 標(biāo)示符、
Detail Disclosure 標(biāo)示符和Check Mark(選中標(biāo)示),下圖顯示了這些標(biāo)示符的效果:


【一步一步學(xué)IOS5 】 處理UITableView中的行選擇
?
在行選擇之后,為了顯示選中標(biāo)志,僅需要在[messageAlert show] 代碼之后,添加如下2行代碼:

? ?? UITableViewCell *cell = [tableView cellForRowAtIndexPath :indexPath];

? ? cell. accessoryType = UITableViewCellAccessoryCheckmark ;

?

第一行通過(guò)使用indexPath獲得選中表的單元格,

第二行更新選中單元格的附件視圖為選中標(biāo)志(Check Mark)

?

編譯運(yùn)行App,在你輕拍一行后,將顯示一個(gè)選擇標(biāo)志(Check Mark)

?


【一步一步學(xué)IOS5 】 處理UITableView中的行選擇

現(xiàn)在,當(dāng)你選擇一行時(shí),將以藍(lán)色突出顯示改行,如果你不喜歡,可以添加如下代碼取消這一效果:

?

[tableView deselectRowAtIndexPath :indexPath animated : YES ];



【一步一步學(xué)IOS5 】 處理UITableView中的行選擇
?
?


?

【一步一步學(xué)IOS5 】 處理UITableView中的行選擇


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 拉萨市| 武义县| 湖州市| 嘉荫县| 梓潼县| 黔南| 搜索| 周至县| 临海市| 田东县| 丹棱县| 三穗县| 鄂托克前旗| 陆良县| 松江区| 黔西| 栖霞市| 鹰潭市| 两当县| 周宁县| 寿阳县| 永兴县| 昔阳县| 温州市| 揭西县| 鄂温| 苏尼特右旗| 康乐县| 民勤县| 临汾市| 浙江省| 贺州市| 武陟县| 增城市| 黄山市| 峨山| 涟源市| 交口县| 雅江县| 瑞金市| 肥乡县|