【问题标题】:Custom UITableViewCell doesn't show anything自定义 UITableViewCell 不显示任何内容
【发布时间】:2014-09-05 19:29:05
【问题描述】:

我已经完成了我的作业,我以为我已经掌控了一切。 当我运行我的项目时一切正常,但自定义 UITableViewCells 中的 UITextView 为空。

这是重要的代码:

[self.tableView registerClass:[NewsCell class]forCellReuseIdentifier:@"NewsCell"];

然后:

NewsCell *cell = [tableView dequeueReusableCellWithIdentifier:@"NewsCell" forIndexPath:indexPath];

NSDictionary *newsObject = [_newsArray objectAtIndex:indexPath.row];
NSString *title = [newsObject objectForKey:@"newsTitle"];

NSLog(@"title: %@", title); // This puts out the correct stuff

[cell.newsTeaser setText:title];

但是 newTeaser UITextView 显示为空。为什么会这样,我犯了什么错误? 我应该补充一点,这是我第一次在 iOS 7 中制作自定义单元格...

【问题讨论】:

  • 如果什么都不显示,它会显示什么?此外,请确保您的单元格的 newsTeaser 插座连接到标签之类的东西。
  • 什么都不显示?所以它确实显示了一些东西? #双重否定
  • 你确定 cell.newsTeaser 不是 nil 吗?
  • 检查 newTeaser 是否不为零,或者它的框架是否在屏幕上/与 CGRectZero 不同
  • @Caleb 我在自定义单元格中有一个 UITextView 和一个 UIIMageView,两者都显示为空白。我有一个从 IB 到自定义单元类的连接。

标签: ios objective-c uitableview


【解决方案1】:

根据我的经验,这经常发生,因为您实施了错误的 init 方法。请记住,UITableViewCell 的指定初始化程序是 initWithStyle:reuseIdentifier:。如果您要添加自定义视图层次结构并且您没有延迟执行此操作或在此初始化程序中执行此操作,则不会创建您的视图。

如果您的单元格也应该与界面生成器兼容,您还应该实现awakeFromNib

//编辑: 但是,如果您使用 cmets 中所述的界面生成器,则说明您使用了错误的注册方法。registerClass:forCellReuseIdentifier: 仅用于通过代码创建类。如果有带有自定义单元格布局的 xib 文件,则需要使用 registerNib:forCellReuseIdentifier: 注册该 xib 文件。如果您使用情节提要,则根本不需要注册单元格。您只需在情节提要文件中指定单元格的reuseIdentifier

【讨论】:

  • 这是可能的,但鉴于 OP 在 cmets 中表示 cell.newsTeaser 为零,这似乎不太可能“最有可能”。似乎更可能是插座根本没有连接。
  • 如果“插座未连接”[self.tableView registerClass:[NewsCell class]forCellReuseIdentifier:@"NewsCell"]; 将是错误的注册方式。无论如何,我会更新我的帖子。
【解决方案2】:

如果您从 API 端点获取数据,您的调用块可能发生在主/UI 线程上,因此您的 UI 在等待调用块完成获取数据时被阻塞。

如果是这种情况,您需要在块方法中使用 dispatch_async,如下所示:

    dispatch_async(dispatch_get_main_queue(), ^{
        [self.tableView reloadData];
    }); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多