为UITableViewCell加载自定义XIB

时间:2014-07-29 08:13:26

标签: ios objective-c uitableview

我正在尝试为UITableViewCell使用自定义XIB文件,但无论我做什么,表格单元格总是空的 - 我的XIB根本就没有加载。

没有任何错误。

这就是我的所作所为:

  1. 创建一个空应用程序,添加一个故事板,表视图控制器,添加一个新的UITableViewController,将其与表格挂钩并设置一些示例项目。

  2. 创建一个控制器作为UITableViewCell +检查选项的子类以生成XIB。

  3. 创建三个示例标签,并将其添加为IBOutlets

  4. 加载XIB文件并尝试将其设置为单元格。

  5. 代码:

    - (void)viewDidLoad
    {
        [super viewDidLoad];
    
        self.tableView.delegate = self;
    
        items = [[NSMutableArray alloc] init];
        for (int i = 0; i < 20; i++) {
            ItemObject *item = [ItemObject new];
            item.topLabel = [NSString stringWithFormat:@"Top %d", i];
            item.leftLabel = [NSString stringWithFormat:@"Left %d", i];
            item.rightLabel = [NSString stringWithFormat:@"Right %d", i];
            [items addObject:item];
        }
    }
    
    - (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 items.count;
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *cellIdentifier = @"ItemCell";
    
        // Set up the cell.
        CustomTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
        if (!cell) {
            [tableView registerNib:[UINib nibWithNibName:@"CustomTableViewCell" bundle:nil] forCellReuseIdentifier:cellIdentifier];
            cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
        }
        ItemObject *currentObject = [items objectAtIndex:indexPath.row];
        cell.topLabel.text   = currentObject.topLabel;
        cell.leftLabel.text  = currentObject.leftLabel;
        cell.rightLabel.text = currentObject.rightLabel;
    
        // General cell and table settings.
        [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
        [tableView setSeparatorColor:[UIColor clearColor]];
    
        return cell;
    }
    

    哪里有错误?有人能指出我正确的方向吗?

    谢谢!

1 个答案:

答案 0 :(得分:13)

确保您已在XIB中设置ItemCell标识符,并且还设置了表数据源。然后将registerNib移至viewDidLoad

-(void)viewDidLoad {
        //...
       self.tableview.dataSource = self;
       [self.tableView registerNib:[UINib nibWithNibName:@"CustomTableViewCell" bundle:nil] forCellReuseIdentifier:@"ItemCell"];

        }

和in cellForRowAtIndexPath:

CustomTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ItemCell" forIndexPath:indexPath];

并移除if (!cell)块,无论如何都不会被使用。