TableView是一個被分成不同部分的滾動視圖,每一部分又進一步被分成行,每行是一個UITableViewCell類的執行個體。可以把圖片,文本和其他任何東西嵌入tableView儲存格,可以自訂他們的形狀,高度,分組或更多。這些分別在UITableViewDataSource和UITableViewDelegate的協議來定義。
#import<UIKit/UIKit.h>
@interface TableViewController:UIViewController
@property(monatomic,strong)UITableView *myTableView;
@end
@implementation TableViewController
@synthesize myTableView;
-(void)viewDidLoad{
[super viewDidLoad];
self.myTableView = [ [UITableView alloc]initWithFrame:self.view.bounds style:UITableViewStylePlain];
[self.view addSubview:self.myTableView];
}
這樣就建立了一個空白的TableView
UITableViewStylePlain
建立一個沒有背景圖片的空白 Table View
UITableViewStyleGrouped
建立一個有背景圖片和圓角組邊框的 Table View,類似於 Settings app。
怎麼添加資料呢?
遵循UITableViewDelegate協議:
//設定tableviewCell高度
-(void)viewDidLoad{
[super viewDidLoad];
CGRect tableViewFrame = self.view.bounds;
self.myTableView = [[UITableView alloc]initWithFrame:tableViewFrame style:UITableViewStylePlain];
self.myTableView.delegate = self;
[self.view addSubview:self.myTableView];
}
-(void)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
CGFloat result = 20.0f;
if([tableView isEqual:self.myTableView]){
result = 40.0f;
}
return result;
}
TableView中的儲存格的位置由其索引路徑展示出來,一個索引路徑是section和row索引的組合。section索引是從零開始的。
添加資料:
添加資料還需要遵循UITableViewDataSource協議
添加一下代碼
self.myTableView.dataSource = self;
self.myTableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
NSInteger result = 0;
if([tableView isEqual:self.myTableView]){
result = 3;
}
return result;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
NSInteger result = 0;
if([tableView isEqual:self.myTableView]){
switch(section){
case 0:{
result = 3;
break;
}
case 1:{
result = 5;
break;
}
case 2:{
result = 8;
break;
}
}
}
return result;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *result = nil;
if([tableView isEqual:self.myTableView]){
static NSString *TableViewCellIdentifier = @"MyCells";
result = [tableView dequeueReusableCellWithIdentifier:TableViewCellIdentifier];
if(result == nil){
result = [ [UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:TableViewCellIdentifier];
}
result.textLabel.text = [NSString stringWithFormat:@"Section %ld,Cell %ld",(long)indexPath.section,(long)indexPath.row];
}
return result;
}
接收和處理Table view事件
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
if([tableView isEqual:self.myTableView]){
NSLog(@"%@",[NSString stringWithFormat:@"Cell %ld in Section %ld is Selected",(long)indexPath.row,(long)indexPath.section]);
}
}
在TableView中使用不同種類的附件
result.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
建立自訂tableView儲存格附件
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *result = nil;
static NSString *myCellIdentifier = @"SimpleCell";
result = [tableView dequeueReusableCellWithIdentifier:myCellIdentifier];
if(result == nil){
result = [ [UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:myCellIdentifier];
}
result.textLabel.text = [NSString stringWithFormat:@"Section %ld,Cell %ld",(long)indexPath.section,(long)indexPath.row];
UIButton *button = [UIButton buttonWithType:UIButtonWithType:UIButtonTypeRoundedRect];
button.frame = CGRectMake(0.0f,0.0f,150.0f,25.0f);
[button setTitle:@"Expand" forState:UIControlStateNormal];
[button addTarget:self action:@selector(performExpand:) forControlEvents:UIControlEventTouchUpInside];
result.accessoryView = button;
return result;
}
-(void)performExpand:(id)paramSender{
/*Take an at ion here*/
UITableViewCell *ownerCell = (UITableViewCell *)paramSender:superview;
if(ownerCell != nil){
NSIndexPath *ownerCellIndexPath = [self.myTableView indexPathForCell:ownerCell];
NSLog(@"Accessory in index path is tapped. indexPath = %@",ownerCellIndexPath);
if(ownerCellIndexPath.section == 0 && ownerCellIndexPath.row == 1){
/*This is the second row in the first section*/
}
}
}