我需要自定义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
我做错了什么。 请帮忙。
提前致谢..
答案 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之外,您应该会看到您期望的行为。