根据Apple给出的定义,我们可以看到UITableVIewCell具有可定制化的属性和方法,这样就满足了我们不同的需要,在我们不同的项目中就能够依据需求来做定制了。定制的方法有两种:一种是通过xib文件直接进行编辑,另一种就是通过代码实现了,个人比较喜欢代码实现。一下就是一些定制化UITableVIewCell过程中可能用到的属性和方法,只是进行总结,具体用法随后会有例程展示。
一、自动适应Cell内容高度
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
UILabel *label = [[UILabel alloc] initWithFrame:CGRectZero];
label.tag = 1;
label.lineBreakMode = UILineBreakModeWordWrap;
label.highlightedTextColor = [UIColor whiteColor];
label.numberOfLines = 0;
label.opaque = NO; // 选中Opaque表示视图后面的任何内容都不应该绘制
label.backgroundColor = [UIColor clearColor];
[cell.contentView addSubview:label];
[label release];
}
UILabel *label = (UILabel *)[cell viewWithTag:1];
NSString *text;
text = [textArray objectAtIndex:indexPath.row];
CGRect cellFrame = [cell frame];
cellFrame.origin = CGPointMake(0, 0);
label.text = text;
CGRect rect = CGRectInset(cellFrame, 2, 2);
label.frame = rect;
[label sizeToFit];
if (label.frame.size.height > 46) {
cellFrame.size.height = 50 + label.frame.size.height - 46;
}
else {
cellFrame.size.height = 50;
}
[cell setFrame:cellFrame];
return cell;
}
然后在heightForRowAtIndexPath中进行高度设定
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
return cell.frame.size.height;
}
二、自定义TableViewCell之间的分割线
定制分隔线的方法有两种,一种是通过API提供的setSeparatorColor 方法进行设定,另一种方法是通过认为的制定分割线,可以使图片也可以是颜色值,当然这个颜色和图片的像素都必须非常小,否则界面可能会不协调。
通过图片进行分割线设定的做法有两种:
1、先设置cell separatorColor为clear,然后把图片做的分割线添加到自定义的custom cell上。
2、在cell里添加一个像素的imageView后将图片载入进,之后设置tableView.separatorStyle = UITableViewCellSeparatorStyleNone
三、自定义Cell中的内容
通常我们可能需要在一个cell上放置我们需要的控件,这样就需要我们自定制cell,然后以这个cell来代替UITableViewCell。示例代码:
//函数一 自定义cell的功能
-(void)makeSubCell:(UITableViewCell *)aCell withTitle:(NSString *)title
value:(NSString *)value
{
CGRect tRect = CGRectMake(20,5, 320, 40);
id lbl = [[UILabel alloc] initWithFrame:tRect]; //此处使用id定义任何控件对象
[lbl setText:title];
[lbl setBackgroundColor:[UIColor clearColor]];
CGRect tEdtRect = CGRectMake(100,15, 320, 40);
id edtPassword = [[UITextField alloc] initWithFrame:tEdtRect];
[edtPassword setText:value];
[edtPassword setBackgroundColor:[UIColor clearColor]];
[edtPassword setKeyboardType:UIKeyboardTypeNumberPad];
[edtPassword setSecureTextEntry:YES];
[aCell addSubview:lbl];
[aCell addSubview:edtPassword];
//release someone
[lbl release];
[edtPassword release];
}
//函数二 表格控制函数
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *SimpleTableIdentifier = @"Simple";
UITableViewCell *cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:SimpleTableIdentifier] autorelease];
NSUInteger row = [indexPath row];
switch (row) {
case 0:
[self makeSubCell:cell withTitle:@"当前密码:" value:@"password"];
break;
case 1:
[self makeSubCell:cell withTitle:@"新 密 码:" value:@"new password"];
break;
case 2:
[self makeSubCell:cell withTitle:@"密码确认:" value:@"confirm password"];
break;
}
if (cell == nil)
{
NSLog(@"cell = nil");
}else
{
NSLog(@"cell <> nil");
}
return cell;
}
最终效果图: