添加數(shù)據(jù)源, 由三個(gè)函數(shù)來(lái)回答數(shù)據(jù)綁定的請(qǐng)求numberOfSectionsInTableView,numberOfRowsInSection 和 cellForRowAtIndexPath.
用numberOfSectionsInTableView方法來(lái)返回table中有幾個(gè)組.
- (NSInteger)numberOfSectionsInTableView:(UITableView*)tableView
{
return 1;
}
用numberOfRowsInSection方法來(lái)返回每個(gè)組里有幾行
- (NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section
{
return nRecords;
}
最后用cellForRowAtIndexPath來(lái)得到一個(gè)包含每一行顯示信息的UITableViewCell對(duì)象.
UITableViewCell類支持文本和圖像,編輯和刪除確認(rèn)等功能.
這些信息會(huì)保存在表隊(duì)列里,用來(lái)至此翻頁(yè)等功能,但是內(nèi)存很低的時(shí)候會(huì)自動(dòng)釋放,然后再需要的時(shí)候重新創(chuàng)建.
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
NSString *CellIdentifier = [[ NSString alloc ] initWithFormat:
@"Cell %d", [ indexPathindexAtPosition: 1 ] ];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier];
if (cell == nil) {
cell = [ [ [ UITableViewCell alloc ]
initWithFrame: CGRectZero reuseIdentifier: CellIdentifier ]
autorelease
];
}
cell.text =CellIdentifier;
returncell;
}
NSIndexPath用來(lái)保存哪一組的哪一行.
[ indexPath indexAtPosition: 0 ]哪一組
[ indexPath indexAtPosition: 1 ]哪一行
7.2 UITableViewCell包含圖像,文本等.
NSString *CellIdentifier = [ [ NSString alloc ] initWithString:
@"Frank" ];
UITableViewCell *cell = [ [ [ UITableViewCell alloc ]
initWithFrame: CGRectZero
reuseIdentifier:CellIdentifier
] autorelease
];
然后你可以為每一個(gè)cell設(shè)置不同的風(fēng)格
(1) 顯示文本: cell.text = @"Frank's Table Cell";
(2) 對(duì)齊: cell.textAlignment = UITextAlignmentLeft;
UITextAlignmentLeft
默認(rèn)是左對(duì)齊
UITextAlignmentRight
右對(duì)齊
UITextAlignmentCenter
中對(duì)齊
(3) 字體和尺寸:
#import
UIFont *myFont = [ UIFont fontWithName: @"Arial" size: 18.0];
cell.font = myFont;
//系統(tǒng)字體
UIFont *mySystemFont = [ UIFont systemFontOfSize: 12.0 ];
UIFont *myBoldSystemFont = [ UIFont boldSystemFontOfSize: 12.0
];
UIFont *myItalicSystemFont = [ UIFont italicSystemFontOfSize: 12.0
];
(4) 顏色
#import
//文本顏色
cell.textColor = [ UIColor redColor ];
//當(dāng)前選擇項(xiàng)的顏色
cell.selectedTextColor = [ UIColor blueColor ];
(5) 圖像
//從你應(yīng)用程序目錄下的文件創(chuàng)建一個(gè)image
cell.image = [ UIImage imageNamed: @"cell.png" ];
//當(dāng)前選中項(xiàng)的圖形
cell.selectedImage = [ UIImage imageNamed: @"selected_cell.png"
];
可以修改table保準(zhǔn)行高來(lái)適應(yīng)你的圖形高度
- (id)init
{
self = [ super init ];
if (self != nil) {
self.tableView.rowHeight =65;
}
returnself;
}
你也可以為每一個(gè)cell定義不同的高度
- (CGFloat)tableView:(UITableView *)tableViewheightForRowAtIndexPath:(NSIndexPath*)indexPath
{
if ([ indexPathindexAtPosition: 1 ] == 0)
return 65.0;
else
return 40.0;
}
(6)選中項(xiàng)的風(fēng)格
cell.selectionStyle = UITableViewCellSelectionStyleBlue;
UITableViewCellSelectionStyleBlue默認(rèn)選中項(xiàng)是藍(lán)色
UITableViewCellSelectionStyleGray灰色
UITableViewCellSelectionStyleNone沒(méi)有變化
(7)標(biāo)簽 (labels)
在偏移量100x0處創(chuàng)建一個(gè)尺寸50x50 label:
UILabel *label = [ [ UILabel alloc ] initWithFrame:
CGRectMake(100.0, 0.0, 50.0, 50.0) ];
label.text = @"Label Text";
label.textAlignment = UITextAlignmentLeft;
label.textColor = [ UIColor redColor ];
label.font = [ UIFont fontWithName: @"Arial" size: 10.0 ];
標(biāo)簽label可以設(shè)置文本陰影,甚至可以定義陰影的偏移:
label.shadowColor = [ UIColor grayColor ];
label.shadowOffset = CGSizeMake(0, -1);
高亮是的顏色:
label.highlightedTextColor = [ UIColor blackColor ];
標(biāo)簽的背景色:
label.backgroundColor = [ UIColor blueColor ];
把標(biāo)簽加到cell里
[ cell addSubview: label ];
(8) 附件
cell.accessoryType =UITableViewCellAccessoryDisclosureIndicator;
Style
Description
UITableViewCellAccessoryNone
沒(méi)有附件
UITableViewCellAccessoryDisclosureIndicator
黑色向右的箭頭
UITableViewCellAccessoryDetailDisclosureButton
藍(lán)色附件按鈕
UITableViewCellAccessoryCheckmark
復(fù)選框,支持選擇
7.3 實(shí)現(xiàn)多選
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath*)indexPath
{
NSLog(@"Selected section %d,cell %d",
[ indexPath indexAtPosition: 0 ], [ indexPathindexAtPosition: 1 ]);
//獲的當(dāng)前選擇項(xiàng)
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath: indexPath];
//顯示復(fù)選框
if (cell.accessoryType ==UITableViewCellAccessoryNone)
cell.accessoryType =UITableViewCellAccessoryCheckmark;
else
cell.accessoryType =UITableViewCellAccessoryNone;
}
7.4 編輯和刪除
在允許用戶刪除和編輯的時(shí)候,每一個(gè)cell左邊會(huì)顯示一個(gè)紅色刪除圖標(biāo)
[ self.tableView setEditing:YES animated:YES ];
關(guān)閉編輯的時(shí)候,table頂部會(huì)顯示一個(gè)Edit導(dǎo)航條
[ self.tableView setEditing: NO animated: YES ];
在編輯過(guò)程中,如果用戶要?jiǎng)h除該項(xiàng),會(huì)彈出一個(gè)刪除確認(rèn)框.
確認(rèn)后調(diào)UITableViewDataSource類的commitEditingStyle方法來(lái)通知你的應(yīng)用程序,
然后你可以從你的底層數(shù)據(jù)源里刪除該項(xiàng),并通知table view刪除該行.
- (void)tableView:(UITableView *)tableView
commitEditingStyle:(UITableViewCellEditingStyle) editingStyle
forRowAtIndexPath:(NSIndexPath *) indexPath
{
if (editingStyle ==UITableViewCellEditingStyleDelete)
{
NSLog(@"Deleted section %d, cell %d", [indexPath indexAtPosition: 0 ], [ indexPath indexAtPosition: 1]);
NSMutableArray *array = [ [ NSMutableArray alloc] init ];
[ array addObject: indexPath ];
[ self.tableView deleteRowsAtIndexPaths:array
withRowAnimation: UITableViewRowAnimationFade
];
}
}
通過(guò)傳遞一個(gè)數(shù)組給deleteRowsAtIndexPaths方法, 可以刪除一行或多行.
withRowAnimation至此下列預(yù)定義的刪除動(dòng)畫(huà)
Animation
Description
UITableViewRowAnimationFade
Cell fades out
UITableViewRowAnimationRight
Cell slides out from right
UITableViewRowAnimationLeft
Cell slides out from left
UITableViewRowAnimationTop
Cell slides out to top of adjacent cell
UITableViewRowAnimationBottom
Cell slides out to bottom of adjacent cell
7.5 重新加載表
當(dāng)你的數(shù)據(jù)變了的時(shí)候,你可以重新加載整個(gè)表
[ self.tableView reloadData ];