Как нарисовать линию вокруг UITableView - PullRequest
1 голос
/ 20 марта 2012

Я знаю, как рисовать линии / прямоугольники в одном представлении. Но я потерян в этом случае: У меня есть UIView A и UITableView B. A добавляется в представление viewController, а B добавляется к A. Как вы знаете, UITableView не имеет границы, и поэтому я пытаюсь нарисовать линию вдоль границ Б. Ниже приведен код, как я организую эти представления:


if (_tableView) {
        [_tableView release];
        _tableView = nil;
    }


    UITableView * temp = [[UITableView alloc] initWithFrame:tableRect style:UITableViewStylePlain];
    temp.delegate = self;
    temp.dataSource = self;
    temp.showsHorizontalScrollIndicator = NO;
    temp.alwaysBounceHorizontal = NO;

    self.table = temp;
    [temp release];
    temp = nil;
    [self.table setContentInset:UIEdgeInsetsMake(1, 2, 0, 2)];

    [_transparencyView addSubview:self.table];


    [self.parentViewController.view addSubview:_transparencyView];
    [_transparencyView setNeedsDisplayInRect:tableRect];

_transparencyView является экземпляром ZJTransparencyView, унаследованным от UIView, и его файл реализации имеет вид:


- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}


// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
    NSLog(@"%s:%@",__func__,NSStringFromCGRect(rect));

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetStrokeColorWithColor(context, [UIColor cyanColor].CGColor);
    CGContextSetLineWidth(context, 2);
    CGContextStrokeRect(context, rect);



}

Проблема, с которой я столкнулся: Когда я добавляю табличный вид и вызываю setNeedsDisplayInRect:, прямая отправка на drawRect: всегда равна {0,0,320,460}. Кажется, что tableRect не имеет никакого эффекта. Я не знаю, почему это происходит. Кто-нибудь может мне помочь?

1 Ответ

2 голосов
/ 20 марта 2012

Поскольку tableRect - это то, что вы инициализируете таблицу, вы должны иметь над ней контроль. Если вы считаете, что правильный прямоугольник не обновляется, вызовите setNeedsDisplay без указания прямоугольника. Но для этого на самом деле нет необходимости делать пользовательское рисование, поскольку UITableView наследуется от UIView, и вы можете нарисовать границу вокруг UIView.

Импорт QuartzCore

#import <QuartzCore/QuartzCore.h>

и установите границу для UITableView как

temp.layer.borderColor=[UIColor cyanColor].CGColor;
temp.layer.borderWidth=2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...