自定义UITabeViewCell无法正常工作

时间:2015-01-07 14:51:43

标签: ios objective-c uitableview custom-cell

我需要自定义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循环中编写了代码 所以这是我的第一个问题,为什么不将文本设置为hello。 但是当我在if循环中编写代码时它会起作用。

我的第二个问题是, 当我的MCQ类型代码位于if (customcell == nil)时 当我加载第二个问题类型MRQ时,我的应用会崩溃,说明错误

-[QuizMCQTableViewCell radioBoxImgV]: unrecognized selector sent to instance

我做错了什么。 请帮忙。

提前致谢..

2 个答案:

答案 0 :(得分:0)

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

其次,unrecognized selector表示属性/方法'radioBoxImgV'不存在于QuizMCQTableViewCell的对象上。这是因为您对两种单元格类型使用相同的单元格标识符,因此表格视图将返回类型为QuizMCQTableViewCell的单元格。包装两个标识符,一个用于第一个单元格,另一个用于第二个单元格类型。

第三,如果您使用ARC,请从{/ 1}}表单中删除alloc / init。

Forth,永远不会从autorelease

返回nil

答案 1 :(得分:0)

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