代码之家  ›  专栏  ›  技术社区  ›  Mark Struzinski

Xcode 5.1 UIViewController中的UITableView-自定义TableViewCell输出为零

  •  3
  • Mark Struzinski  · 技术社区  · 12 年前

    我有一个UITableView作为UIViewController中的子视图。我没有使用UITableViewController,因为我有一些其他与表视图无关的内容占据了屏幕的一部分。我正在使用故事板。我将表视图设置为出口,视图控制器是数据源和委托。如果我在这个场景中使用标准的UITableViewCell,一切都很好,我可以加载内容。

    我需要为此表视图使用自定义UITableViewCell,因此我执行了以下步骤:

    1. 创建了名为SWTableViewCell的UITableView子类
    2. 在viewDidLoad中添加了一个调用,以向接口生成器注册单元格: [self.tableView registerClass:[SWTableViewCell class] forCellReuseIdentifier:@"Cell"];
    3. 在我的表视图上的情节提要中,将原型单元格的Class设置为SWTableViewCell
    4. 在情节提要中,将单元重用标识符设置为“单元”
    5. 在情节提要的原型单元格中添加了一些标签
    6. 仍然在故事板中,ctrl从标签拖动到SWTableViewCell.h以创建outlets
    7. 在我的 cellForRowAtIndexPath: 方法,将单元格出列并强制转换为自定义子类: SWTableViewCell *cell = (SWTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"Cell"];

    当我检查单元格变量时,它是正确的类型。它不是UITableViewCell,而是SWTableViewCell。但没有一家网点是人烟稀少的。财产存在,但它们是零。我确信我一定错过了某种联系,但我想不出我在这一点上跳过了什么。

    这种情况是可能的,还是仅仅通过IB和故事板无法实现?

    2 回复  |  直到 12 年前
        1
  •  8
  •   Community Mohan Dere    9 年前

    正在删除对的呼叫

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

    解决了这个问题。

    我不知道这个方法的确切用途,因为我从未使用过它,所以我会调查它。如果有人知道什么事情是否需要这个电话,请告诉我们!


    编辑:

    所以,背后的想法 registerClass:forCellReuseIdentifier: 它告诉tableView如何创建新单元格。那样,如果 dequeueReusableCellWithIdentifier: 不返回单元格(如果队列为空),tableView知道如何创建新单元格,并且不需要手动创建单元格)。


    编辑2:

    我找到了 this 线程,其中表示:

    如果单元格是使用脚本中的原型创建的,则无需注册类。

    简单地呼叫 dequeueReusableCellWithReuseIdentifier: 将“激活”tableView的单元格重用功能。

    所以 registerClass:用于CellReuseIdentifier: 仅当您手动构建单元格而不使用故事板时,才会调用。

        2
  •  4
  •   dariaa    12 年前

    以下是一些提示:

    基本上有三种方法可以创建和使用 UITableViewCell 秒:

    1. 使用 原型电池 在故事板/笔尖中

      (在内部的情节提要/笔尖中创建单元格UI UITableView )

      两者都不应使用 registerClass:forCellReuseIdentifier: registerNib:forCellReuseIdentifier: 方法。 UIStoryboard 由于您指定了 reuseIdentifier 在情节提要中 tableView 知道哪个单元格与哪个 重用标识符 .

    2. 使用 单独的笔尖 对于 tableViewCell 用户界面

      (当你想使用相同的工具时,这可能是一种方法 表格视图单元格 在几个 表视图 秒)

      应使用 registerNib:用于CellReuseIdentifier: 方法

    3. 不要使用笔尖,创建 表格视图单元格 用户界面 以编程方式

      应使用 registerClass:用于CellReuseIdentifier: 方法

    此外,请注意 registerClass:用于CellReuseIdentifier: registerNib:用于CellReuseIdentifier: 应在之前调用(最常在 viewDidLoad ) dequeueReusableCellWithIdentifier:forIndexPath: 方法。如果您为 重用标识符 保证 dequeueReusableCellWithIdentifier:用于索引路径: 返回有效的单元格(与 dequeueReusableCellWithIdentifier: ).

    在您的代码中 Storyboard 已注册a nib 具有单元格的UI,但您调用 registerClass:用于CellReuseIdentifier: 具有相同的 重用标识符 强制表视图注销nib并注册不知道的类 IBOutlet s