【问题标题】:Reusing a UITableViewCell's IBOutlets with two different UITableViewControllers使用两个不同的 UITableViewController 重用 UITableViewCell 的 IBOutlets
【发布时间】:2015-06-16 03:12:41
【问题描述】:

我正在创建一个咖啡计时器作为学习练习,我想根据所选的冲泡方法制作不同的菜单。我将我的设置存储在 NSUserDefaults 中,并使用两个单独的数组填充我的表,如下所示:

var aero = ([
        "Cool Down Time Enabled" : true,
        "Cool Down Time" : 30,
        "Inverted" : true,
        "Base Steep Time" : 150,
        "Base Inverted Steep Time" : 180,

        ])

var french = ([
        "Cool Down Time Enabled" : true,
        "Cool Down Time" : 30,
        "Base Steep Time" : 180,

        ])

我创建了两个 UITableViewController,一个用于FrenchPress,一个用于AeroPress,它们的代码基本相同:

FrenchPressTableViewController.swift - 设置菜单

AeroPressTableViewController.swift - 设置菜单

两者都为我的 Setting.Swift 类 (gist) 的实例赋值并存储在不同的数组中。

在 IB 中,我从我的法式压力机控制器开始,并创建了两个原型单元和两个原型类来配合它们。

SwitchCell.Swift - 我的 UISwitch 原型电池插座的模型

TimingCell.Swift - 为我的 TimingButton 原型电池插座建模

采取的初步步骤:

  • 在 IB 中为我的法国媒体设置创建新的 tableView。
  • 创建一个指定的FrenchPressTableViewController,并将其分配给我的新法国媒体表视图
  • 使用我的 SettingCellTimingCell 类设置两个新原型单元并设置 IBOutlets/Actions。
  • IBOutlets 从我的 FrenchPressTableViewController 连接到我的 SettingCell.swift(我稍后将这些插座用于我的 Aero 设置)。

我的 FrenchPress 设置工作正常

所以我决定使用相同的过程添加我的 Aero 印刷机设置菜单:

  • 在 IB 中创建新的 tableView
  • 创建一个AeroPressTableViewController,并将其分配给我的新航空表视图
  • 设置两个新的原型单元并将我以前存在的 SettingCell 和 TimingCell 分配给适当的单元。
  • 我利用之前连接到我的 FrenchPressTableViewController 的插座,并将它们连接到我的 Aero 控制器以及重用单元类。

最终产品如下所示:

但是当我运行 Aero 设置菜单时,我收到以下错误:

致命错误:在展开可选值时意外发现 nil

问题:

从我的调试器可以看出,我的 SettingCell 类似乎返回了一个带有cell.switchLabel.textnil 值。这对我来说没有意义,因为我正在尝试为它分配一个值。

显然我做错了什么,重用我的 UITableViewCell 类的正确方法是什么?

【问题讨论】:

  • 删除该行 tableView.registerClass(SwitchCell.self,forCellReuseIdentifier:"SwitchCell2") 并在情节提要中添加 cellIdentifier ..它有效..
  • 你搞定了...我实际上添加了 registerClass 上周解决了一个非常相似的问题,导致了这个问题。我必须在故障排除时解决了上一个问题。好吧...如果您将此作为答案发布,我会接受,或者我会阅读您的其他一些帖子,看看是否有任何我想投票的。谢谢阿尼什
  • 我很高兴它成功了!!!

标签: swift uitableview code-reuse iboutlet tableviewcell


【解决方案1】:

将 UITableViewCell 类注册为tableView.registerClass(SwitchCell.self,forCellReuseIdentifier:"SwitchCell2") 时会出现此问题

删除该行 tableView.registerClass(SwitchCell.self,forCellReuseIdentifier:"SwitchCell2") 并在情节提要中设置 cellIdentifier.. 它可以工作

【讨论】:

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