iphone應用開發之六:UITableView的詳細講解(一)

來源:互聯網
上載者:User

Andy-清風 原創,轉載請註明,謝謝。

1.    UITableView的初始化

 

UITableView tableview= [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 420)]; 

 [tableview setDelegate:self]; 

 [tableview setDataSource:self]; 

 [self.view addSubview: tableview]; 

 [tableview release]; 

 

 

(1)在初始化UITableView的時候必須實現UITableView的是,在.h檔案中要繼承UITableViewDelegate和UITableViewDataSource,並實現3個UITableView資料來源方法和設定它的delegate為self,這個是在不直接繼承UITableViewController實現的方法。

(2) 直接在XCODE產生項目的時候繼承UITableViewController的,它會幫你自動寫好UITableView必須要實現的方法。

(3)UITableView繼承自UIScrollView。

2.    UITableView的資料來源

(1)UITableView是依賴外部資源為新表格單元填上內容的,我們稱為資料來源,這個資料來源可以根據索引路徑提供表格儲存格,在UITableView中,索引路徑是NSIndexPath的對象,可以選擇分段或者分行,即是我們編碼中的section和row。

(2)UITableView有三個必須實現的核心方法,分別如下:

-(NSInteger)numberOfSectionsInTableView:(UITableView*)tableView;

這個方法可以分段顯示或者單個列表顯示我們的資料。如下,左邊為分段顯示,右邊為單個列表顯示:

       

 

-(NSInteger)tableView:(UITableView*)tableViewnumberOfRowsInSection:(NSInteger)section;

這個方法返回每個分段的行數,不同分段返回不同的行數可以用switch來做,如果是單個列表就直接返回單個你想要的函數即可。

-(UITableViewCell*)tableView:(UITableView*)tableViewcellForRowAtIndexPath:(NSIndexPath *)indexPath;

這個方法是返回我們調用的每一個儲存格。通過我們索引的路徑的section和row來確定。

3.    UITableView的委託方法

使用委託是為了響應使用者的互動動作,比如下拉更新資料和選擇某一行儲存格,在UITableView中有很大這種方法供我們選擇。

(1) 委託方法講解

 

//設定Section的數量

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{ 

 return TitleData; 

//設定每個section顯示的Title 

- (NSString *)tableView:(UITableView *)tableViewtitleForHeaderInSection:(NSInteger)section{ 

 return @"Andy-清風"; 

 

//指定有多少個分區(Section),預設為1 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 

 return 2; 

 

//指定每個分區中有多少行,預設為1 

- (NSInteger)tableView:(UITableView *)tableViewnumberOfRowsInSection:(NSInteger)section{ 

 

//設定每行調用的cell 

-(UITableViewCell *)tableView:(UITableView *)tableViewcellForRowAtIndexPath:(NSIndexPath *)indexPath { 

static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier"; 

   

    UITableViewCell *cell = [tableViewdequeueReusableCellWithIdentifier: 

                             SimpleTableIdentifier]; 

    if (cell == nil) {   

        cell = [[[UITableViewCellalloc] initWithStyle:UITableViewCellStyleDefault 

                                       reuseIdentifier:SimpleTableIdentifier] autorelease]; 

 } 

 cell.imageView.image=image;//未選cell時的圖片

 cell.imageView.highlightedImage=highlightImage;//選中cell後的圖片

 cell.text=@”Andy-清風”; 

 return cell; 

//設定讓UITableView行縮排

-(NSInteger)tableView:(UITableView *)tableViewindentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath{ 

 NSUInteger row = [indexPath row]; 

 return row; 

//設定cell每行間隔的高度

- (CGFloat)tableView:(UITableView *)tableViewheightForRowAtIndexPath:(NSIndexPath *)indexPath{ 

    return 40; 

//返回當前所選cell 

NSIndexPath *ip = [NSIndexPath indexPathForRow:row inSection:section]; 

[TopicsTable selectRowAtIndexPath:ip animated:YESscrollPosition:UITableViewScrollPositionNone]; 

 

//設定UITableView的style 

[tableView setSeparatorStyle:UITableViewCellSelectionStyleNone]; 

//設定選中Cell的響應事件

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

 

 [tableView deselectRowAtIndexPath:indexPath animated:YES];//選中後的反顯顏色即刻消失

 

//設定選中的行所執行的動作

 

-(NSIndexPath *)tableView:(UITableView *)tableViewwillSelectRowAtIndexPath:(NSIndexPath *)indexPath 

    NSUInteger row = [indexPath row]; 

     return indexPath; 

//設定划動cell是否出現del按鈕,可供刪除資料裡進行處理

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath*)indexPath { 

//設定刪除時編輯狀態

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle 

forRowAtIndexPath:(NSIndexPath *)indexPath 

 

//右側添加一個索引表

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{ 

 

 

(2)  其他

 

//選中cell時的顏色,在官方文檔有如下可以選擇

 

typedef enum { 

    UITableViewCellSelectionStyleNone, 

    UITableViewCellSelectionStyleBlue, 

    UITableViewCellSelectionStyleGray 

} UITableViewCellSelectionStyle 

 

  

 

//cell右邊按鈕格式

 

typedef enum { 

    UITableViewCellAccessoryNone,                   //don't show any accessory view 

    UITableViewCellAccessoryDisclosureIndicator,    //regular chevron. doesn't track 

    UITableViewCellAccessoryDetailDisclosureButton, //blue button w/ chevron. tracks 

    UITableViewCellAccessoryCheckmark               //checkmark. doesn't track 

} UITableViewCellAccessoryType 

 

  

 

//是否加換行線

 

typedef enum { 

    UITableViewCellSeparatorStyleNone, 

    UITableViewCellSeparatorStyleSingleLine 

} UITableViewCellSeparatorStyle 

 

  

 

//改變換行線顏色

 

tableView.separatorColor= [UIColor blueColor]; 

 

 

 

4.    UITableViewCell

表中的每一行都代表一個UITableViewCell。可以使用映像、文本還有輔助的表徵圖等來自訂你自己的UITableViewCell。你可以自訂你自己的cell如下模型或者像appstore那樣的。

 

UITableViewCell為每個Cell提供了三個可以選擇的屬性,如下:

l textLabel:填寫文本

l detailTextLable:稍微詳細的副標題

l imageView:用來顯示你cell的圖片,可以通過UIImage來載入。

最後給出一個官方的demo給大家學習下,多實踐,不懂的就問下,下節課講些UITableView應用中實際會出現的問題,比如自訂啊,重用儲存格,儲存格的資料排序等問題。歡迎大家拍磚。

附上代碼:http://www.bkjia.com/uploadfile/2011/1130/20111130025401502.zip
 

相關文章

聯繫我們

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