2014-05-21 2 views
1

Итак, я создал пользовательскую ячейку (используя файл .xib) и связал ее с использованием пользовательского класса контроллера, и я также не забыл писать в идентификаторе ячейки. Я также дал тот же идентификатор ячейки в моей прототипе ячейки контроллера таблицы. В пользовательском классе контроллера я просто имею выход к текстовой метке в файле .h. Ниже приведен код для моего контроллера табличного представления. Когда я запускаю приложение, пользовательские ячейки не отображаются, но там есть ячейки, потому что я могу нажать на них (но они просто белые). Что я делаю неправильно, почему не отображаются пользовательские ячейки?пользовательская ячейка не отображается

Если я использую ячейки по умолчанию (нестандартные), тогда все работает нормально. Так что проблема в том, что я не использую свои пользовательские ячейки правильно где-то.

#import "ListmaniaTableViewController.h" 
#import "ListmaniaTableViewCell.h" 

@interface ListmaniaTableViewController() 

@property (strong, nonatomic) NSMutableArray *tasks; //of task object 

@end 

@implementation ListmaniaTableViewController 

- (void)viewDidLoad{ 
    [super viewDidLoad]; 
    task *task1 = [[task alloc] init]; 
    task1.taskDescription = @"TASK 1"; 
    [self.tasks addObject:task1]; 
    task *task2 = [[task alloc] init]; 
    task2.taskDescription = @"TASK 2"; 
    [self.tasks addObject:task2]; 
    task *task3 = [[task alloc] init]; 
    task3.taskDescription = @"TASK 3"; 
    [self.tasks addObject:task3]; 
} 

- (NSMutableArray *)tasks{ 
    if(!_tasks){ 
     _tasks = [[NSMutableArray alloc] init]; 
    } 
    return _tasks; 
} 

/*- (id)initWithStyle:(UITableViewStyle)style 
{ 
    self = [super initWithStyle:style]; 
    if (self) { 

    } 
    return self; 

}*/ 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
    if ([segue.identifier isEqualToString:@"Add New Item"]) { 

    } 
} 

- (void)addNewTask:(task *)newTask{ 
    [self.tasks addObject:newTask]; 
} 

#pragma mark - Table view data source 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    // Return the number of sections. 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    // Return the number of rows in the section. 
    return [self.tasks count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    ListmaniaTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ListmaniaCell" forIndexPath:indexPath]; 
    if(!cell){ 
     [tableView registerNib:[UINib nibWithNibName:@"ListmaniaTableViewCell" bundle:nil] forCellReuseIdentifier:@"ListmaniaCell"]; 
     cell = [tableView dequeueReusableCellWithIdentifier:@"ListmaniaCell" forIndexPath:indexPath]; 
    } 

    return cell; 
} 

- (void)tableView:(UITableView *)tableView willDisplayCell:(ListmaniaTableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 
    task *task = [self.tasks objectAtIndex:indexPath.row]; 
    NSString *taskLabel = task.taskDescription; 
    cell.taskLabel.text = taskLabel; 
} 

@end 

ответ

0

Код, который вы имеете в tableView:willDisplayCell:forRowAtIndexPath: метод должен быть в tableView:cellForRowAtIndexPath: методом. Как это:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    ListmaniaTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ListmaniaCell" forIndexPath:indexPath]; 
    if(!cell){ 
     [tableView registerNib:[UINib nibWithNibName:@"ListmaniaTableViewCell" bundle:nil] forCellReuseIdentifier:@"ListmaniaCell"]; 
     cell = [tableView dequeueReusableCellWithIdentifier:@"ListmaniaCell" forIndexPath:indexPath]; 
    } 
    task *task = [self.tasks objectAtIndex:indexPath.row]; 
    NSString *taskLabel = task.taskDescription; 
    cell.taskLabel.text = taskLabel; 

    return cell; 
} 
+0

что-нибудь (я просто попытался его снова и никаких изменений) – crazyshark

1

Но

 [self.tableView registerNib:[UINib nibWithNibName:@"ListmaniaTableViewCell" bundle:nil] forCellReuseIdentifier:@"ListmaniaCell"]; 

viewDidLoad: в.

+0

не изменятся Когда я, приложение падает при запуске и консоль говорят " завершение с неперехваченным исключением типа NSException « – crazyshark

+0

@crazyshark Я отредактировал свой ответ. – dasdom

+0

Я использовал self.tableView, когда он разбился – crazyshark

0

Я понял, что проблема. У меня был выход в пользовательскую ячейку, которая была дважды связана. Я также переместил строку ниже в viewdidload как предложено @dasdom

[self.tableView registerNib:[UINib nibWithNibName:@"ListmaniaTableViewCell" bundle:nil] forCellReuseIdentifier:@"ListmaniaCell"]; 
Смежные вопросы