2013-02-28 3 views
4

Я пытаюсь создать пользовательский UITableViewCell.Создание пользовательского UITableViewCell

Из конструктора интерфейса XCode 4.6 я установил свойство ячейки Style в пользовательский. И добавил элементы управления в ячейку, используя перетаскивание. 2 UILables и UIButton. Похоже на это.

enter image description here

Я создал отдельный класс, производный от UITableViewCell присвоить свойства 3-х элементов пользовательского интерфейса и внести изменения. Я также установил пользовательский класс ячейки как DashboardCell из Identity Inspector.

DashboardCell.h

DashboardCell.m

#import "DashboardCell.h" 

@implementation DashboardCell 

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
{ 
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
    if (self) { 
     [self.numberOfOverdueMails setBackgroundColor:[UIColor colorWithRed:244/255.0f green:119/255.0f blue:125/255.0f alpha:1.0f]]; 
     [self.numberOfOverdueMails setTitle:@"lol" forState:UIControlStateNormal]; 
    } 
    return self; 
} 

- (void)setSelected:(BOOL)selected animated:(BOOL)animated 
{ 
    [super setSelected:selected animated:animated]; 

    // Configure the view for the selected state 
} 

@end 

В TableViewController, я изменил следующий метод, чтобы вернуть свою пользовательскую ячейку.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    DashboardCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 
    if (cell == nil) { 
     cell = [[DashboardCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 

    return cell; 
} 

Моя проблема в том, даже если кнопка пользовательские показывает вверх, изменения я делал (изменение цвета фона кнопки, изменение названия одного UILabel) не отображаются. Что, кажется, ошибка здесь?

ответ

4

Метод initWithStyle:reuseIdentifier: не будет вызываться, потому что вы используете конструктор интерфейса для создания ячейки.

Вы можете установить цвет фона и заголовка путем переопределения метода awakeFromNib.

Вы также можете установить их в методе tableView:cellForRowAtIndexPath:

2

Если вы получаете клетку от XIb или раскадровки, dequeueReusableCellWithIdentifier:forIndexPath: будет всегда возвращать cell - если он существует, он будет повторно использовать его, если не будет создан один из шаблона в IB. Поэтому ваш пункт if(cell ==nil) никогда не будет удовлетворен, и на самом деле он больше не нужен. Если вы хотите использовать метод init, используйте initWithCoder:

Смежные вопросы