1.使用系統(tǒng)自定義的各種UITableViewCell的樣式
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString* indentifier = @"cell";
MyTableCell* cell = [tableView dequeueReusableCellWithIdentifier:indentifier];
if (!cell) {
/*
typedef NS_ENUM(NSInteger, UITableViewCellStyle) {
UITableViewCellStyleDefault, // Simple cell with text label and optional image view (behavior of UITableViewCell in iPhoneOS 2.x)
UITableViewCellStyleValue1, // Left aligned label on left and right aligned label on right with blue text (Used in Settings)
UITableViewCellStyleValue2, // Right aligned label on left with blue text and left aligned label on right (Used in Phone/Contacts)
UITableViewCellStyleSubtitle // Left aligned label on top and left aligned label on bottom with gray text (Used in iPod).
};
*/
cell = [[[MyTableCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:indentifier]autorelease];
}
cell.textLabel.text = [_data objectAtIndex:indexPath.row];
cell.detailTextLabel.text = @"detail";
cell.imageView.image = [UIImage imageNamed:@"checkmark.png"];
return cell;
}
使用UITableViewCellStyleDefault的效果:
使用UITableViewCellStyleValue1的效果:
使用UITableViewCellStyleValue2的效果:
在UITableViewCell內(nèi)默認(rèn)是有contentview和accessoryView這兩個(gè)subview的,contentview中的subview根據(jù)不同的cell的style會(huì)使用不同的布局。contentview和其中的默認(rèn)subview會(huì)根據(jù)cell的編輯狀態(tài)出現(xiàn)的控件自動(dòng)縮進(jìn),自定義cell時(shí)可以把自定義控件添加在contentview中,也可以直接添加到cell中。
2.設(shè)置UITableViewCell的屬性
//cell的右邊輔助按鈕的樣式
cell.accessoryType = UITableViewCellAccessoryCheckmark;
//自定義cell右邊的輔助按鈕
cell.accessoryView = nil;
//自定義cell的背景
cell.backgroundView = nil;
//設(shè)置cell的contentview中的detail的文字內(nèi)容
cell.detailTextLabel.text = @"";
//查看cell當(dāng)前的編輯模式
int style = cell.editingStyle;
//設(shè)置當(dāng)cell進(jìn)入編輯模式時(shí)的輔助按鈕樣式
cell.editingAccessoryType = UITableViewCellAccessoryDisclosureIndicator;
//自定義cell進(jìn)入編輯模式后輔助按鈕
cell.editingAccessoryView = nil;
//獲取cell的縮進(jìn)級(jí)別
int level = cell.indentationLevel;
//獲取cell的縮進(jìn)寬度
float width = cell.indentationWidth;
//設(shè)置cell被選中時(shí)的背景
cell.selectedBackgroundView = nil;
//設(shè)置cell的選中狀態(tài)樣式
cell.selectionStyle = UITableViewCellSelectionStyleBlue;
//設(shè)置cell的contentview中的textlabel文字內(nèi)容
cell.textLabel.text = @"";
3.自定義的UITableViewCell重寫父類的方法
//初始化uitableviewcell后,自定義cell添加subview
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
//當(dāng)cell被選中時(shí),uitableview內(nèi)部會(huì)自動(dòng)調(diào)用該方法,重寫該方法可以在cell被選中時(shí)做一些額外的操作
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
//當(dāng)cell處于高亮狀態(tài)時(shí),uitableview內(nèi)部會(huì)自動(dòng)調(diào)用該方法,重寫該方法可以在cell處于高亮?xí)r做一些額外操作
-(void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated
//重寫layoutsubviews方法,為了查看當(dāng)cell改變編輯狀態(tài)時(shí),有什么subview
-(void)layoutSubviews{
[super layoutSubviews];
NSArray* subs = self.subviews;
for (UIView* sub in subs) {
NSLog(@"view:%@",sub);
}
}
當(dāng)進(jìn)入刪除編輯模式時(shí),cell的subview有一個(gè)叫UITableViewCellDeleteConfirmationControl的subview,這代表刪除按鈕??梢孕薷脑搗iew達(dá)到修改刪除按鈕的位置,大小等屬性。
當(dāng)進(jìn)入移動(dòng)編輯模式時(shí),cell的subview有一個(gè)叫UITableViewCellReorderControl的subview,這個(gè)代表移動(dòng)按鈕??梢孕薷脑搗iew達(dá)到修改移動(dòng)按鈕的位置,大小等屬性。
當(dāng)進(jìn)入插入編輯模式時(shí),cell的subview有一個(gè)叫UITableViewCellEditControl的subview,這個(gè)代表添加按鈕。可以修改該view達(dá)到修改添加按鈕的位置,大小等屬性。
//當(dāng)cell的狀態(tài)變?yōu)榫庉嫊r(shí),uitableview內(nèi)部會(huì)自動(dòng)調(diào)用該方法,重寫該方法可以改變cell的布局
-(void)willTransitionToState:(UITableViewCellStateMask)state{
[super willTransitionToState:state];
}
//當(dāng)cell的狀態(tài)變?yōu)榫庉嫊r(shí),uitableview內(nèi)部會(huì)自動(dòng)調(diào)用該方法,重寫該方法可以改變cell的布局
-(void)didTransitionToState:(UITableViewCellStateMask)state{
[super didTransitionToState:state];
/*
typedef NS_OPTIONS(NSUInteger, UITableViewCellStateMask) {
UITableViewCellStateDefaultMask = 0,
UITableViewCellStateShowingEditControlMask = 1 << 0,
UITableViewCellStateShowingDeleteConfirmationMask = 1 << 1
};
*/
//滑動(dòng)出現(xiàn)的刪除按鈕state是2的,編輯狀態(tài)下的刪除按鈕state是3的
if (state == UITableViewCellStateShowingDeleteConfirmationMask||state==3) {
for (UIView *subview in self.subviews) {
//cell的subview為UITableViewCellDeleteConfirmationControl時(shí),代表是刪除按鈕
if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationControl"]) {
UIView *deleteButtonView = subview;
CGRect f = deleteButtonView.frame;
f.origin.x -= 50;
deleteButtonView.frame = f; }
}
}
//插入和移動(dòng)的編輯狀態(tài)state都是1
else if(state==UITableViewCellStateShowingEditControlMask){
for (UIView *subview in self.subviews) {
NSString* type = @"";
//判斷如果cell當(dāng)前是插入模式,則尋找UITableViewCellEditControl的subview,代表添加按鈕
if (self.editingStyle==UITableViewCellEditingStyleInsert) {
type = @"UITableViewCellEditControl";
}
//否則尋找UITableViewCellReorderControl的subview,代表移動(dòng)按鈕
else type = @"UITableViewCellReorderControl";
if ([NSStringFromClass([subview class]) isEqualToString:type]) {
UIView *deleteButtonView = [subview.subviews objectAtIndex:0];
CGRect f = deleteButtonView.frame;
f.origin.x -= 50;
deleteButtonView.frame = f;
}
}
}
}
4.UITableViewCell自定義背景顏色
方法1:
通過修改contentview的backgroundcolor
方法2:
創(chuàng)建一個(gè)uiview,設(shè)置它的backgroundcolor后再添加到cell里
方法3:
通過在- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath的回調(diào)中設(shè)置cell的backgroundcolor