自定义单元格未显示

时间:2014-05-21 16:55:09

标签: ios objective-c uitableview xcode5

所以我创建了一个自定义单元格(使用.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

3 个答案:

答案 0 :(得分:1)

但是

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

答案 1 :(得分: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;
}

答案 2 :(得分:0)

我弄明白了这个问题。我在自定义单元格中有一个双重链接的插座。我也按照@dasdom

的建议将下面的行移动到viewdidload中
    [self.tableView registerNib:[UINib nibWithNibName:@"ListmaniaTableViewCell" bundle:nil] forCellReuseIdentifier:@"ListmaniaCell"];