如何在细胞之间放置垂直线

时间:2011-05-04 07:02:30

标签: iphone

如何在细胞之间放置垂直线

2 个答案:

答案 0 :(得分:4)

试试这个链接
http://www.iphonedevx.com/?p=153

注意:我已从整个链接中复制代码并将其粘贴到此处,以确保答案仍然有用,即使以后链接出现故障也是如此:

  

UITableView可能是iPhone上最常用的视图。它的   灵活,UI非常适合在iPhone上使用。有   关于如何向UITableViewCell添加多个项目的大量示例。   但是,我需要以更传统的方式呈现一些数据   电子表格样式网格。结果运作良好,使我能够打包   屏幕上的很多信息都很难理解   没有垂直网格。我会在这里展示一个非常简化的版本   您可以使用向UITableView添加垂直线。

     

首先,我们需要创建UITableViewCell的子类。我们就是这样   可以覆盖drawrect并绘制我们的行并添加一个数组来保存   我们将绘制线条的位置列表。

@interface MyTableCell : UITableViewCell {
    NSMutableArray *columns;
}
- (void)addColumn:(CGFloat)position;
@end
  

在这个简化的例子中,我们将保留实际的定位   UITableViewController中单元格中的文本并手动放置   (完整的源代码附在最后)。我们只是提供一个   绘制垂直线以制作网格的机制。列位置   通过调用addColumn添加:

- (void)addColumn:(CGFloat)position {
    [columns addObject:[NSNumber numberWithFloat:position]];
}
  

现在让我们覆盖drawRect。在其中我们抓住当前的图形上下文   并设置线条颜色和宽度。然后我们迭代我们的列   数组从单元格行的顶部到底部绘制一条线   每个位置都存储在数组中。

- (void)drawRect:(CGRect)rect {
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    // Use the same color and width as the default cell separator for now
    CGContextSetRGBStrokeColor(ctx, 0.5, 0.5, 0.5, 1.0);
    CGContextSetLineWidth(ctx, 0.25);

    for (int i = 0; i < [columns count]; i++) {
        CGFloat f = [((NSNumber*) [columns objectAtIndex:i]) floatValue];
        CGContextMoveToPoint(ctx, f, 0);
        CGContextAddLineToPoint(ctx, f, self.bounds.size.height);
    }

    CGContextStrokePath(ctx);

    [super drawRect:rect];
}
To add columns to the view just call

[cell addColumn:50];
when you’re building each cell.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    NSString *MyIdentifier = [NSString stringWithFormat:@"MyIdentifier %i", indexPath.row];

    MyTableCell *cell = (MyTableCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];

    if (cell == nil) {
        cell = [[[MyTableCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];

        UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(0.0, 0, 30.0,
                                                           tableView.rowHeight)] autorelease];
        [cell addColumn:50];
        label.tag = LABEL_TAG;
        label.font = [UIFont systemFontOfSize:12.0];
        label.text = [NSString stringWithFormat:@"%d", indexPath.row];
        label.textAlignment = UITextAlignmentRight;
        label.textColor = [UIColor blueColor];
        label.autoresizingMask = UIViewAutoresizingFlexibleRightMargin |
        UIViewAutoresizingFlexibleHeight;
        [cell.contentView addSubview:label]; 

        label =  [[[UILabel alloc] initWithFrame:CGRectMake(60.0, 0, 30.0,
                                                            tableView.rowHeight)] autorelease];
        [cell addColumn:120];
        label.tag = VALUE_TAG;
        label.font = [UIFont systemFontOfSize:12.0];
        // add some silly value
        label.text = [NSString stringWithFormat:@"%d", indexPath.row * 4];
        label.textAlignment = UITextAlignmentRight;
        label.textColor = [UIColor blueColor];
        label.autoresizingMask = UIViewAutoresizingFlexibleRightMargin |
        UIViewAutoresizingFlexibleHeight;
        [cell.contentView addSubview:label];
    }

    return cell;
}

答案 1 :(得分:0)

为每个单元格赋予左/右边框。

您将在单元格之间获得垂直线

所有最好的