iPhone UITableView(利用UITableView實現平滑的九宮格效果)

來源:互聯網
上載者:User

UITableView是一種“目錄檢視或叫表視圖”(英文名字table view),這種表視圖以列表的形式顯示或編輯資訊,它由一列、多行組成。使用者可以通過垂直滾動的方式導航到一個表視圖的任意行上,並可以自訂每一行資料的顯示方式。

 

在建立表視圖的時候,可以選擇兩種風格的表視圖:UITableViewStylePlain或者UITableViewStyleGrouped,前者是按索引進行排序的,而後者是按組進行分類顯示的。

 

基本上每一個UITableView都有相應的UITableViewController、UITableViewDelegate、UITableViewDataSource類。UITableViewController類作為UITableView的視圖控制類(MVC裡Controller的角色)負責管理UITableView,它和大多數UIViewController類一樣,控制著UITableView的生命週期函數。UITableViewDelegate作為委託模式裡的被委派物件的介面,和大多數iPhone委託介面一樣,它提供了UITableView子類無法在行為上保持一致的部分,在這裡讀者可以自訂表格視圖的顯示風格,甚至可以自訂表格視圖的每一個元素,它的重要介面定義如下:

 

@protocol UITableViewDelegate<NSObject, UIScrollViewDelegate>

@optional

 

// Display customization

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath;

 

// Variable height support

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;

 

// Section header & footer information. Views are preferred over title should you decide to provide both

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section; 

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section;  

 

// Accessories (disclosures).

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath;

 

// Selection

// Called before the user changes the selection. Return a new indexPath, or nil, to change the proposed selection.

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath;

 

// Called after the user changes the selection.

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

 

// Editing

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath;

 

// Indentation

- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath; // return depth of row for hierarchies

 

@end

 

UITableViewDataSource提供了表視圖的資料來源,下表列出了常見的表視圖資料來源方法:

 

Method
 Description
 
tableView:numberOfRowsInSection:
 特定Section內的行數
 
numberOfSectionsInTableView:
 特定資料來源的表視圖的Section數目
 
tableView:cellForRowAtIndexPath:
 從資料來源擷取儲存格內容並放到特定的行上
 
sectionIndexTitlesForTableView:
 擷取一個資料來源的表視圖的標題
 
tableView:commitEditingStyle:forRowAtIndexPath
 提交儲存格內容的修改
 
talbeView:canEditRowAtIndexPath:
 通過返回一個Boolean類型的值來通知表視圖某一行能否修改
 
tableView:canMoveRowAtIndexPath:
 通過返回一個Boolean類型的值來通知表視圖某一行能否被移動
 
tableView:moveRowAtIndexPath:toIndexPath:
 允許某一個表視圖儲存格被移動
 


 

表視圖資料來源介面提供了表視圖資料來源操作的常用方法,其中tableView:numberOfRowsInSection和tableView:cellForRowAtIndexPath:是每一個表試圖的資料來源必須實現的兩個方法,前者告訴表視圖內有多少行儲存格,而後者告訴表視圖每一個儲存格的內容是什麼。程式通過實現這兩個方法,可以提供一個表視圖所需要的基本資料並供表視圖調用。

 

筆者在下面的例子裡會編寫一個帶導航面板的表視圖,這種複雜類型的控制項在iPhone中隨處可見,如iPod程式、備忘錄程式、鬧鐘程式等。

 

ü         首先,建立一個“Window-based”項目並命名為“TableProjectOne”。

ü         建立一個UIViewController的子類,並命名為“MyViewController”。

ü         建立一個空的xib並命名為“MyViewController”。

ü         在Interface Build中開啟MyViewController.xib。

ü         從Library裡拖拉一個view到MyViewController的視窗中,然後再添加一個table view到新添加的view下,確保table view完全填充view。

ü         修改File’s Owner為MyViewController,串連MyViewController的view到上面新添加的view上。

ü         到這裡MyViewController建立完畢,儲存並退出Interface Build。

ü         開啟MainWindow.xib並拖拉一個Navigation Controller到視窗中。

ü         拖拉一個View Controller到Navigation Controller下,改變它的類名和Nib名為MyViewController。

ü         拖拉一個Bar Button Item到Navigation Controller上,並改title為“view2”。

 

修改TableProjectOneAppDelegate.h檔案如下:

 

#import <UIKit/UIKit.h>

#import "MyViewController.h"

 

@interface TableProjectOneAppDelegate : NSObject <UIApplicationDelegate> {

    UIWindow *window;

         IBOutlet UINavigationController *viewController;

}

 

@property (nonatomic, retain) IBOutlet UIWindow *window;

@property (nonatomic, retain) IBOutlet UINavigationController *viewController;

 

@end

 

實現檔案TableProjectOneAppDelegate.m如下:

 

#import "TableProjectOneAppDelegate.h"

 

@implementation TableProjectOneAppDelegate

 

@synthesize window;

@synthesize viewController;

 

- (void)applicationDidFinishLaunching:(UIApplication *)application {   

         [window addSubview:self.viewController.view];

    // Override point for customization after application launch

    [window makeKeyAndVisible];

}

 

- (void)dealloc {

    [window release];

         [viewController release];

    [super dealloc];

}

@end

 

最終實現的效果如下:

相關文章

聯繫我們

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