Table View簡單描述:
在iPhone和其他iOS的很多程式中都會看到Table View的出現,除了一般的表格資料展示之外,設定的屬性資料往往也用到Table View,Table View主要分為以下兩種:
- Plain:這是普通的列表風格
- Grouped :這是分塊風格。
對於UITableView,我們有一些特殊的概念和術語,比如說我們成Table View的一行為Cell,而許多的Cell可以組成Section,每個Section上下又分別有Header和Footer,許多個的Section則組成了整個Table ,當然Table也有Header和Footer,下面看兩種圖就能明白這幾個拗口名詞了::
現在理論知識瞭解的差不多了。今天先做一個Plain樣式的例子,這樣加強對Table view的熟練使用。 1、建立項目建立一個Single View Application,命名為TableViewDemo,開發環境是:Xcode 4.3,iPhone 5.1模擬器。
2、Table View放上控制項開啟ViewController.xib檔案,往ViewController.xib介面上拖拽一個Table View控制項到現有的View上,對齊。
3、串連新添加的TableView和ViewController。選中新添的TableView控制項,開啟串連檢查器(Connection Inspector), 找到delegate和datasource並點中圓圈拉線串連到左邊File's Owner表徵圖上,為什麼要把這兩個串連File's Owner上呢?這是因為iOS使用的MVC設計模式,View和ViewController之間的對應關係,需要一個橋樑來進行串連的(即,對於一個視圖,他如何知道自己的介面的操作應該由誰來響應),這個橋樑就是File's Owner。
4、開啟ViewController.h,添加協議和Property (類似與java裡的實現介面)
#import <UIKit/UIKit.h>@interface ViewController : UIViewController<UITableViewDelegate, UITableViewDataSource>@property (strong, nonatomic) NSArray *list;@end
5、開啟.m檔案,添加:
@synthesize list = _list;
這是發現有兩個警告,提示未完成的實現,這提示的是UITableViewDelegate, UITableViewDataSource這個兩個標頭檔裡的協議的方法未實現。待會我們去實現它。6、建立資料
- (void)viewDidLoad{ [super viewDidLoad];// Do any additional setup after loading the view, typically from a nib. NSArray *array = [[NSArray alloc] initWithObjects:@"美國", @"菲律賓", @"黃岩島", @"中國", @"泰國", @"越南", @"寮國", @"日本" , nil]; self.list = array; }- (void)viewDidUnload{ [super viewDidUnload]; // Release any retained subviews of the main view. self.list = nil; }
7、產生row關鍵的步驟來了,實現tableview添加資料來源,返回TableView的行數,返回各行cell執行個體。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *TableSampleIdentifier = @"TableSampleIdentifier"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: TableSampleIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:TableSampleIdentifier]; } NSUInteger row = [indexPath row]; cell.textLabel.text = [self.list objectAtIndex:row]; return cell; }
上面的第二個方法中,
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: TableSampleIdentifier];
這個語句根據標識符TableSampleIdentifier尋找當前可以重用的UITableViewCell。當某行滑出當前可見地區後,我們重用它所對應的UITableViewCell對象,那麼就可以節省記憶體和資源。這裡UITableViewCellStyleDefault是表示UITableViewCell風格的常數,除此之外,還有其他風格,後面將會用到。
注意參數(NSIndexPath *)indexPath,它將行號row和部分號section合并了,通過[indexPath row];擷取行號。之後給cell設定其文本:
cell.textLabel.text = [self.list objectAtIndex: row];
8、現在一個簡單的TableView就弄好看,運行下看效果、、 9、添加圖片。在項目上add files到項目,提交兩張小圖片,然後在cell返回之前添加如下代碼
NSUInteger row = [indexPath row]; cell.textLabel.text = [self.list objectAtIndex:row]; UIImage *image = [UIImage imageNamed:@"qq"]; cell.imageView.image = image; UIImage *highLighedImage = [UIImage imageNamed:@"youdao"]; cell.imageView.highlightedImage = highLighedImage;return cell;
效果如下: 10、設定行的風格表示UITableViewCell風格的常量有:
UITableViewCellStyleDefault
UITableViewCellStyleSubtle
UITableViewCellStyleValue1
UITableViewCellStyleValue2可以自己修改看看效果。可以添加一個detail
cell.detailTextLabel.text =@"打打打打";
return cell;
11、選擇table裡的某一行 在.m檔案@end之前編寫 -(void)table 這時會自動提示可以實現的方法, 我們選擇這個方法
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
選中是做個提示,提示選中了那個資訊,代碼實現如下:
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ NSString *rowString = [self.list objectAtIndex:[indexPath row]]; UIAlertView * alter = [[UIAlertView alloc] initWithTitle:@"選中的行資訊" message:rowString delegate:self cancelButtonTitle:@"確定" otherButtonTitles:nil, nil]; [alter show];}
效果:
以上是Plain風格的TableView 例子代碼:http://download.csdn.net/detail/totogo2010/4361870 著作權聲明:本文由http://blog.csdn.net/totogo2010/原創,歡迎轉載分享。請尊重作者勞動,轉載時保留該聲明和作者部落格連結,謝謝!