我在使用以下代码创建UITableViewCell
时输了一个拼写错误:
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"CellIdentifier";
UITableViewCell *cell = [self.tableView
dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
NSLog(@"Creating cell");
cell = [[[UITableViewCell alloc]
initWithStyle:UITableViewStylePlain
reuseIdentifier:CellIdentifier] autorelease];
}
cell.textLabel.text = @"Hello";
return cell;
}
错字正在使用UITableViewStylePlain
而不是UITableViewCellStyleDefault
。代码工作正常,创建新单元格。为什么呢?
答案 0 :(得分:10)
这就是定义这些变量的方式。
typedef enum {
UITableViewCellStyleDefault,
UITableViewCellStyleValue1,
UITableViewCellStyleValue2,
UITableViewCellStyleSubtitle
} UITableViewCellStyle;
typedef enum {
UITableViewStylePlain,
UITableViewStyleGrouped
} UITableViewStyle;
UITableViewCellStyleDefault
和UITableViewStylePlain
都评为0,因此它们可以互换。
答案 1 :(得分:3)
因为UITableViewStylePlain
被声明为:
typedef enum {
UITableViewStylePlain,
UITableViewStyleGrouped
} UITableViewStyle;
UITableViewCellStyleDefault
被声明为:
typedef enum {
UITableViewCellStyleDefault,
UITableViewCellStyleValue1,
UITableViewCellStyleValue2,
UITableViewCellStyleSubtitle
} UITableViewCellStyle;
在这两种情况下,您所谈论的值是enum
中的第一个,这意味着它们都将编译为0
。因此,它们是“可互换的”(尽管你肯定不依赖于生产代码中的这种行为)。
答案 2 :(得分:1)
UITableViewStylePlain
和UITableViewCellStyleDefault
都是具有整数值的常量。当你使用其中一个时,你实际上并没有将常量传递给方法,而是传递常量的值。
如其他答案中所述,两个常量都具有相同的整数值,因此initWithStyle:reuseIdentifier
将收到它可以使用的样式ID,它甚至没有注意到你提供了一个没有的常量与此方法有关。