自定义 UITabeViewCell 不工作

Custom UITabeViewCell not working

我需要自定义方面的帮助UITableViewCell

我创建了两个自定义单元格,我在其中使用 DTO 检查我的问题类型。 如果它是 MCQ 然后加载 QuizMCQTableViewCell 或者如果它是 MRQ 然后加载 QuizMRQTableViewCell.

下面是我的代码。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ([[self.currentQuestionDTO type] isEqualToString:@"MCQ"])
    {
        QuizMCQTableViewCell *customcell = [tableView dequeueReusableCellWithIdentifier:optionCellIdentifier];
        if (customcell == nil)
        {
            customcell = [[[QuizMCQTableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:optionCellIdentifier] autorelease];

        }else
        {
            UIImageView* MRQIV=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"checkbox.png"]];
            customcell.checkBoxImgV.image = MRQIV.image;
            customcell.cellTextLbl.text = @"Hello";
        }
        return customcell;
    }

    if ([[self.currentQuestionDTO type] isEqualToString:@"MRQ"])
    {
        QuizMRQTableViewCell *customcell = [tableView dequeueReusableCellWithIdentifier:optionCellIdentifier];
        if (customcell == nil)
        {
            customcell = [[[QuizMRQTableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:optionCellIdentifier] autorelease];

        }else
        {
            UIImageView* MRQIV=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"radio.png"]];
            customcell.radioBoxImgV.image = MRQIV.image;
            customcell.cellTextLbl.text = @"Hi";

        }
        return customcell;
    }
    return nil;
}

我面临的问题是, 当我的 tableView 加载时,第一个问题类型是 MCQ 所以它适用于第一个单元格,但没有显示任何内容,因为我在 if (customcell == nil) 的 else 循环中编写了代码 所以这是我的第一个问题,为什么不将text设置为hello。 但是当我在 if 循环中编写代码时它起作用了。

我的第二个问题是, 当我的 MCQ 类型的代码在 if (customcell == nil) 中时 当我加载第二个问题类型 MRQ 时,我的应用程序崩溃并提示以下错误

-[QuizMCQTableViewCell radioBoxImgV]: unrecognized selector sent to instance

我做错了什么。 请帮忙。

提前致谢..

第一个问题Question type is MCQ so it goes for first cell, but didn't display anything。如果您没有在 xib/sotryboard 内的 UITableView 中添加单元格。 dequeCell 将 return nil 因此不会执行 else 块,这将导致显示为空。

其次,unrecognized selector表示property/method'radioBoxImgV'不存在于QuizMCQTableViewCell的对象上。这是因为您对两种单元格类型使用相同的单元格标识符,因此 table 视图将 return 类型为 QuizMCQTableViewCell 的单元格。创建两个标识符,一个用于第一个单元格,一个用于第二个单元格类型。

第三,如果您使用的是ARC,请将alloc/init中的autorelease去掉。

第四,从不 RETURN nil 来自 cellForRowAtIndexPath

没有文本的原因是您将单元格的设置代码放在 else 子句中。 if (cell == nil) 用于确定 tableView 是否能够使现有单元格出列。如果没有,您需要创建一个。无论哪种方式,您都需要设置单元格。因此,如果将设置代码移到 else 之外,您应该会看到预期的行为。