UITableViewCell自定义那点事

 

根据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;
}

最终效果图:




 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值