认为没有使用自定义TableViewCell

时间:2013-11-04 22:27:13

标签: ios iphone objective-c uitableview

我在我的表视图中使用了一个自定义单元格,用于加载类别列表,在选择项目时,它会带您进入下一个列出该类别中产品的视图。

问题是我在自己的xib文件中创建了这个单元格,并创建了一个自定义类,当我尝试将主故事板中的原型单元连接到segue时,它不起作用。

如果我在didSelectCellForRowAtIndexPath中调用segue,它只会在您选择除您点击的第一个单元格之外的其他单元格时执行segue。但是从第一个单元格中加载信息而不是第二个单元格。

以下是视图控制器的一些代码。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *qrTableIdentifier = @"QRTableCell";

    QRTableCell *cell = (QRTableCell *)[tableView dequeueReusableCellWithIdentifier:qrTableIdentifier];
    if(cell == nil){
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"QRTableCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];
    }

    QRDoc *category = self.qrload.categories[[indexPath row]];

    cell.nameLabel.text = category.data.category;
    cell.nameLabel.textColor = [UIColor performSelector:NSSelectorFromString(category.data.color)];
    cell.bulletImage.image = category.bullet;
    return cell;
}


- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NSLog(@"Preparing for seque");
    if ([[segue identifier] isEqualToString:@"showCategorySegue"]) {
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        //QRDoc *category = self.qrload.categories[[sender row]];
        QRDoc *category = self.qrload.categories[[indexPath row]];
        NSLog(@"Loading in new category");
        QRCatViewController *catVC = [segue destinationViewController];
        catVC.selectedCategory = category.data.category;
        catVC.categoryColor = category.data.color;
    }
}

对于tableview单元格,我认为这个问题可能存在。

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code
    }
    return self;
}

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

    // Configure the view for the selected state
}

单元格本身现在只包含一个imageview和标签,所以我看不出它有什么问题。我是否需要以编程方式创建单元格以使其正常工作?

1 个答案:

答案 0 :(得分:0)

很可能,这只是一个错字。

在这种情况下,我建议从一个干净的平板开始,并将工作代码失败的进行比较。

enter image description here

我附上了使用Storyboard解决自定义单元格的紧凑项目,它提供了单独XIB的替代方法。

从单独的UITableViewCell引用XIB只需要一行代码:

tableView.register(
    UINib(nibName: "XIBSectionHeader", bundle:nil),
    forCellReuseIdentifier: "reuseIdentifier")

►在GitHub上找到此解决方案,并在Swift Recipes上找到其他详细信息。