iphone - initWithFrame 与 initWithStyle

标签 iphone objective-c ios4

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

我的表格 View 使用自定义单元格。

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

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

单元格初始化后(如果它没有出队),我们在单元格上设置文本。但是当我使用 initWithStyle:reuseIdentifier: 时,这些都没有设置,但它适用于 initWithFrame:CGRectZero。除了使用的 init 方法 (initWithStyle) 之外,没有任何代码发生变化。

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

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

“NewsItemName: (null)”中的结果

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

谢谢

最佳答案

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 调用添加到您的单元格分配中。

CustomCellinitWithStyle 实现:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        //do things
    }
    return self;
}

关于iphone - initWithFrame 与 initWithStyle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9380710/

相关文章:

iphone - 如何更改ios分段控件一侧的大小?

ios - 已取消订阅 channel ,但仍在 channel 中

iphone - 带有 coreplot 图 subview 的 UIScrollView 不经常缩放

ios - 如何以编程方式将 "Group table view"模式定义为背景?

iphone - 在 Safari 中拦截 URL 和打开 URL

ios - 在导航 View Controller 登录屏幕上运行 performSegueWithIdentifier 通过两个屏幕转换

ios - 创建类似于 iPhone 消息传递应用程序的 UITextField/UITextView

ios - 获取引用文件夹 ios 中子目录的名称

iphone - 在 UIAlertView 的文本中显示可调用的电话号码

iphone - 从不兼容类型 'id<MFMessageComposeViewControllerDelegate>' 分配给 'MainViewController *'