initWithFrame与initWithStyle

时间:2012-02-21 15:59:33

标签: iphone objective-c ios4

我想从已弃用的initWithFrame:reuseIdentifier:更新我的TableView。

我的tableview使用自定义单元格。

它所说的任何地方都使用initWithStyle:,并且它不会以任何方式改变行为或单元格initWithFrame:CGRectZero reuseIdentifier:

但是当我使用initWithStyle:UITableViewCellStyleDefault reuseIdentifier:构建时,单元格变为空白(即我们的自定义单元格不起作用(因为它是用某种样式初始化的?)。“

在细胞初始化后(如果它没有出列),我们在细胞上设置文本。但是,当我使用initWithStyle:reuseIdentifier:时,这些都没有设置,但它适用于initWithFrame:CGRectZero。除了使用的init方法(initWithStyle)之外,没有任何代码被更改。

创建(或重复使用)单元格后放入的这些行:

cell.newsItemNameLabel.text = @"test";
NSLog(@"NewsItemName: %@",cell.newsItemNameLabel.text);

结果" NewsItemName :( null)"

有人有想法吗?这两者之间真正的区别是什么?

谢谢

1 个答案:

答案 0 :(得分:3)

cellForRowAtIndexPath的实施方式应与以下内容类似:

- (CustomCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"CellIdentifier";

    CustomCell *cell = (CustomCell *)(UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    // Configure the cell.
    cell.textLabel.text = NSLocalizedString(@"Detail", @"Detail");
    return cell;
}

其中CustomCell是自定义单元格类的名称。请注意,此实现使用ARC(自动引用计数)。如果您碰巧不使用此功能,请在您的单元格分配中添加autorelease来电。

CustomCell的{​​{1}}实施:

initWithStyle