【问题标题】:How should I implement a custom table view cell?我应该如何实现自定义表格视图单元格?
【发布时间】:2015-10-07 18:36:21
【问题描述】:

我正在尝试将 tableview 中的单元格从通用更改为自定义,并创建了一个新的 tableview 单元格类。但是,我无法让单元格识别新的自定义单元格。相反,它仍然显示通用单元格,尽管我已经在识别检查器中将故事板中的设置更改为自定义,并且还将 tableview 单元格的类更改为新的自定义类。我还将情节提要中单元格中的元素连接到新的自定义类。

我的理解是 tableview VC 从tableView cellForRowAtIndexPath 方法中知道要使用哪个类,我也用下面的代码改变了它。该项目编译但继续显示旧的通用单元格。任何人都可以看到错误或提出其他建议吗?

#import "customCell.h"

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  customCell *cell = (customCell *)[self.tableView dequeueReusableCellWithIdentifier:@"Cell"];
    Items *item = [self.fetchedResultsController objectAtIndexPath:indexPath];
    
    return cell;
}

提前感谢您的任何建议。

编辑:

通过拖动 uielements 在 tableview 顶部的情节提要中创建自定义单元格。也许这是一个问题:

单元格样式设置为自定义:

【问题讨论】:

  • 您是否也在情节提要中将单元格标识符设为单元格?
  • 是的,它以前是 Cell,现在仍然是 Cell。这似乎是它仍然显示通用单元格的方式。
  • 你能发布你的自定义单元格 xib 的屏幕截图吗?如果你不使用 xib,你是如何设计自定义单元格的?
  • 情节提要中没有什么比自定义更好的了。它是静态单元或动态原型。您能否提供您如何将其设置为自定义的屏幕截图?
  • 以前它同时显示通用单元格和新的自定义单元格,但显示自定义单元格的单词“标签”而不是实际数据。我设法阻止它显示旧数据。这是因为源文件中还有一个 configureCell 方法。所以它现在显示标签字样。

标签: ios objective-c uitableview custom-cell


【解决方案1】:

您需要创建新的 UITableViewCell 并启用“创建 XIB 文件...”。 在 XIB 中创建您的自定义单元格,并将其作为您刚刚创建的类的自定义类。

然后在tableView cellForRowAtIndexPath注册笔尖:(它很快,但我敢打赌你可以找出目标c并行......)

tableView.registerNib(UINib(nibName: "YourUITableViewCellClass", bundle: nil), forCellReuseIdentifier: "YourCustomIdentifierFromTheCustomClass")

然后访问您的手机:

var cell = tableView.dequeueReusableCellWithIdentifier("YourCustomIdentifierFromTheCustomClass")

就是这样。

【讨论】:

  • 您“不需要”使用 XIB,您可以从 Storyboard 中完成。
  • 我猜你是对的。这就是我如何使 UITableViewController 在情节提要中保持清洁的方式。然后当我需要访问单元格的元素时,使用 XIB 比使用标签调用视图更容易:)
【解决方案2】:

您可以通过拖动单元格视图在主故事板中创建自定义单元格。

为该原型创建自定义类。

在标识符检查器中提及类名。

将该类导入您的视图控制器 .h 文件。

并将您的自定义从主故事板连接到自定义 class.h 文件。

它有效!。

【讨论】:

    【解决方案3】:

    当您创建自定义单元格时,您必须执行以下操作:

    1. 在故事板单元格上设置标签、图像等。

    2. 创建一个自定义单元类(继承自 UITableViewCell)(CustomCell.h & .m), CustomCell.h 拥有所有的 属性作为标签、图像等的 iboutlet 并将它们全部合成 正在实施中。

    3. 创建此自定义类后返回故事板,选择 自定义单元格,将其类更改为 CustomCell 并给它一些 标识符如“MyCustomCell”,然后右键单击自定义单元格 并将 IBOutlets 与标签等连接起来。

    4. 现在在你正在实现的类中导入 CustomCell 类 UITableView 并使用您在 CustomCell 中定义的属性 类。

    - (UITableViewCell *)tableView: (UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath 
    
       {
        static NSString *MyIdentifier = @"MyCustomCell";
    
        CustomCell*cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
    
        if (cell == nil)
        {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                           reuseIdentifier:MyIdentifier] autorelease];
        }
    
        // Here we use the provided setImageWithURL: method to load the web image
        // Ensure you use a placeholder image otherwise cells will be initialized with no image
        [cell.imageView setImageWithURL:[NSURL URLWithString:@"http://example.com/image.jpg"]
                       placeholderImage:[UIImage imageNamed:@"placeholder"]];
            cell.myCustomLabel.text = @"My Text";
        return cell; }
    

    【讨论】:

      【解决方案4】:

      选择故事板上的单元格,然后在此字段中输入班级名称。

      当您将其从标识符中取出时,它将成为该类的一个实例。

      【讨论】:

      • 您需要显示自定义单元格的屏幕截图。 @user1904273
      • 也许我误会了什么。我目前正在 tableview 上的 storyboard 中创建自定义单元格。我必须在其他地方创建它吗?
      • 好的。终于让它工作了。细胞没有得到数据。我必须在上面的方法 cell.item = item; 中添加一行;
      【解决方案5】:

      请注意,每个常规 tableViewCell 都有一个内置和隐藏的 UIImageView。

      在 Objective-C 中,您只需在 cellForRowAtIndexPath 中执行此操作,

      cell.imageView.image = [UIImage imageNamed:@"My awesome image"];
      

      在 Swift 中,这非常接近。

      cell.imageView?.image = UIImage(named: "My awesome image")
      

      【讨论】: