Я пытаюсь создать таблицу в виде сетки, используя UITableView, перезаписывая вертикальные линии поверх стандартных горизонтальных линий, предусмотренных по умолчанию в UITableView.Я адаптирую свой код к примеру, предоставленному из этого блога: http://www.iphonedevx.com/?p=153.
Сначала код, который рисует вертикальные линии (того же цвета, что и горизонтальные линии), реализован в файле, отдельном от контроллера табличного представления., называемый "MyTableCell.m":
- (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];
}
Далее, в методе tableView контроллера таблицы мы вызываем [cell addColumn: 50], чтобы нарисовать вертикальную линию в 50 пикселей слева от левой руки.сторона границы вида:
- (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;
}
Я пытаюсь изменить фон всего вида с белого (по умолчанию) на черный.Я пытаюсь сделать это, установив self.view.backgroundColor в черный цвет в методе viewDidLoad контроллера табличного представления:
- (void)viewDidLoad {
self.view.backgroundColor = [UIColor blackColor];
}
Однако, когда я делаю это, вертикальные линии исчезают ...
Я думаю, что каким-то образом установка backgroundColor в viewDidLoad изменяет CurrentContext к тому времени, когда мы получим метод drawRect:, но я не знаю, как это отрегулировать.Я попытался установить цвет фона с помощью CGContextSetFillColorWithColor () внутри drawRect: вот так:
GContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(ctx, tableBackgroundColor());
CGContextFillRect(ctx, self.bounds);
где tableBackgroundColor () черный, как этот:
CGColorRef tableBackgroundColor()
{
static CGColorRef c = NULL;
if(c == NULL)
{
c = CreateDeviceRGBColor(0.0, 0.0, 0.0, 1.0); // black
}
return c;
}
CGColorRef CreateDeviceRGBColor(CGFloat r, CGFloat g, CGFloat b, CGFloat a)
{
CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB();
CGFloat comps[] = {r, g, b, a};
CGColorRef color = CGColorCreate(rgb, comps);
CGColorSpaceRelease(rgb);
return color;
}
Однако, как толькоЯ пытаюсь изменить цвет фона, используя этот метод, вертикальные линии по-прежнему стираются.Что мне здесь не хватает?
Любые идеи высоко ценятся заранее!