我如何定制像Twitter这样的UITableViewCell?

时间:2012-02-11 04:25:35

标签: objective-c ios ipad uitableview

我发现iPad twitter.app UITableViewCell的边框有两条像素线,它看起来漂亮而专业,我该怎么做?谢谢!
enter image description here

5 个答案:

答案 0 :(得分:2)

由于UITableViewCell继承自UIView,因此单元格具有内容视图。您可以将自己的子视图(标签和文本字段)添加到contentView并以编程方式或使用Interface Builder进行布局。

有许多关于如何实现这一目标的在线教程。只需使用谷歌搜索“uitableviewcell界面构建器教程”。

查看这篇非常好的教程Custom UITableViewCell Using Interface Builder

答案 1 :(得分:2)

最后,我定制了UITableViewCell使用代码,我认为它看起来很好。 :)

MenuViewController.m文件:

- (id)initWithFrame:(CGRect)frame {
    if (self = [super init]) {
        [self.view setFrame:frame]; 

        _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) style:UITableViewStylePlain];
        [_tableView setDelegate:self];
        [_tableView setDataSource:self];
        [_tableView setBackgroundColor:[UIColor clearColor]];
        [_tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];

        UIView* footerView =  [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 1)];
        [_tableView setTableFooterView:footerView];
        [footerView release];        

        [self.view addSubview:_tableView];
    }
    return self;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";

    DoubleSeparatorCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[DoubleSeparatorCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
    }

    NSString *text;
    UIColor *upperLineColor,*lowerLineColor,*viewColor;

    upperLineColor = RGBA(255, 255, 255, 30);
    lowerLineColor = RGBA(0, 0, 0, 50);
    viewColor = RGBA(0,0,0,5);

    if ([indexPath row] == 0) {
        text = NSLocalizedString(@"...", nil);
    } else if ([indexPath row] == 1) {
        text = NSLocalizedString(@"...", nil);
    } else if ([indexPath row] == 2) {
        text = NSLocalizedString(@"...", nil);
    } else {
        text = NSLocalizedString(@"...", nil);
    }
    [cell.textLabel setText:text];
    [cell.textLabel setTextColor:RGBA(170, 170, 170, 100)];
    [cell.textLabel setShadowColor:[UIColor blackColor]];
    [cell.textLabel setShadowOffset:CGSizeMake(1, 1)];

    [cell.upperLine setBackgroundColor:upperLineColor];
    [cell.lowerLine setBackgroundColor:lowerLineColor];
    [cell.contentView setBackgroundColor:viewColor];

    return cell;
}

DoubleSeparatorCell.h

@interface DoubleSeparatorCell : UITableViewCell {
    UIView *upperLine;
    UIView *lowerLine;
}
@property (nonatomic ,retain) UIView *upperLine;
@property (nonatomic ,retain) UIView *lowerLine;
@end

DoubleSeparatorCell.m

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        self.upperLine = [[UIView alloc] init];
        self.lowerLine = [[UIView alloc] init];
        [self.contentView addSubview:self.upperLine];
        [self.contentView addSubview:self.lowerLine];
    }
    return self;
}

- (void)layoutSubviews {
    [super layoutSubviews];
    [self.upperLine setFrame:CGRectMake(0, 0, self.contentView.frame.size.width, 1)];
    [self.lowerLine setFrame:CGRectMake(0, self.contentView.frame.size.height - 1, self.frame.size.width, 1)];
}

答案 2 :(得分:1)


斯里卡已经向你展示了正确的道路。顺便说一下,我只想添加以下内容:

  • 您可以通过编程方式对单元格进行切割,这可以通过继承本机类UITableViewCell来完成。
  • 然后,创建表视图单元类的实例并将其添加到UITableView。
  • 现在这个单元格是你的。

    快乐编码, 阿伦

  • 答案 3 :(得分:1)

    我会指出你截图的那些细胞看起来有一个浅灰色的顶部边框1点和一个深灰色的底部边框1点(或者它们可能是像素 - 抱歉我的眼睛不那么好: - ))。

    所以它可能是一种黑客(继续,野蛮我的人),但你可以:

    1. 使用框架CGRect(0,0,cell.contentView.frame.size,width,1)创建UILabel topBorder
    2. 使用框架CGRect创建UILabel bottomBorder(0,cell.contentView.frame.size.height - 1,cell.contentView.frame.size.width,1)
    3. 将topBorder的颜色设置为UIColor lightGrayColor(或调整确切的颜色)
    4. 将bottomBorder的颜色设置为UIColor darkGrayColor(同上)
    5. 将两个子视图添加到cell.contentView
    6. 请注意,您不必为UITableCellView创建子类 - 只需将这些步骤添加到tableView:cellForRowAtIndexPath:方法中,它们就会出现。

      享受,

      达明

    答案 4 :(得分:0)

    覆盖drawRect方法并根据需要绘制线条。

    - (void)drawRect:(CGRect)rect
    {
          CGRect bounds = [self bounds];
          CGContextRef context      = UIGraphicsGetCurrentContext();    
          CGContextSetLineWidth(context, 1.0);
          CGContextSetStrokeColorWithColor(context, [topColor CGColor]);
          // border top
          CGContextMoveToPoint(context, bounds.origin.x, bounds.origin.y);
          CGContextAddLineToPoint(context, bounds.origin.x+bounds.size.width, bounds.origin.y);
          CGContextStrokePath(context); 
          // border bottom
          CGContextSetLineWidth(context, 1.0);
          CGContextSetStrokeColorWithColor(context, [lowerColor CGColor]);
    
          CGContextMoveToPoint(context, bounds.origin.x, bounds.origin.y+1);
          CGContextAddLineToPoint(context, bounds.origin.x+bounds.size.width, bounds.origin.y+1);
    
          CGContextStrokePath(context); 
    }