2015-02-02 2 views
0

У меня есть splitViewController, destinationController - это tableViewController, и я хотел бы управлять дизайном ячейки, если пользовательский класс «MyCell». DrawRect вызывается только тогда, когда я перетаскиваю tableView: красный фон появляется только после исчезновения ячейки с экрана и повторного появления. Вы знаете, почему?configure cell drawRect: пользовательский drawRect появляется только после перетаскивания в tableView?

//in viewController.m 
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    MyCell*cell = (MyCell*)[tableView dequeueReusableCellWithIdentifier:@"CellDetail"] ; 
    [self configureCell:cell atIndexPath:indexPath]; 
    return cell; 
} 
- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath { 
    RDV *object = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
    cell.textLabel.text = [[object valueForKey:@"name"] description]; 
    [cell setNeedsDisplay]; 
    [cell layoutIfNeeded]; 
} 



//in MyCell.m 
-(void)drawRect:(CGRect)rect{ 
    [self setBackgroundColor: [UIColor redColor]]; 
} 

ответ

0

Ответ был немного сложным, мне пришлось использовать MyRealCell* cell = (MyRealCell*)[tableView dequeueReusableCellWithIdentifier:@"MyCell" forIndexPath:indexPath]; с forIndexPath, таким образом, в кадре contentView содержится что-то, в противном случае оно равно 0,0,0,0.

0

Я не уверен, почему изменение цвета не отображается до тех пор, пока вы не прокрутите, но в любом случае вы не должны использовать drawRect для этой цели. Поместите код цвета фона в метод инициализации ячейки или в awakeFromNib.

+0

Спасибо rdelmar, ответ был сложным, мне пришлось использовать «MyRealCell * cell = (MyRealCell *) [tableView dequeueReusableCellWithIdentifier: @« MyCell »forIndexPath: indexPath];' с 'forIndexPath', таким образом, кадр contentView содержит что-то, в противном случае - 0,0,0,0. – Paul

+0

@Paul, что это связано с настройкой цвета? – rdelmar

+0

Если кадр равен 0,0,0,0, он ничего не рисует, тогда как если contentView имеет фрейм, может появиться цвет градиента. – Paul

0

Предполагаю, что вы не зарегистрировали ячейку со столом. Там для

MyCell*cell = (MyCell*)[tableView dequeueReusableCellWithIdentifier:@"CellDetail"] ; 

возвращает nil. так как вы можете отправить сообщение на номер nil, и всегда будет возвращено nil из 0x0 с просьбой о возврате кадра CGRectZeo.

Почему перетаскивание не приводит к появлению ячеек, не очевидно. вы реализуете tableView:cellWillAppear: или аналогичные?