重用UITableViewCell的IBOutlets和两个不同的UITableViewControllers

时间:2015-06-16 03:12:42

标签: swift uitableview code-reuse iboutlet tableviewcell

我正在创建一个咖啡计时器作为学习练习,我想根据所选的酿造方法选择不同的菜单。我将我的设置存储在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,

        ])

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

FrenchPressTableViewController.swift - 设置菜单

AeroPressTableViewController.swift - 设置菜单

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

在IB中,我开始使用我的法式印刷机控制器,并创建了两个原型单元和两个原型类,以便与它们一起使用。

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

TimingCell.Swift - 模拟我的TimingButton原型细胞出口

采取的初步措施:

  • 在IB中为我的法语印刷机设置创建新的tableView。
  • 创建指定的FrenchPressTableViewController,并将其分配给我的新法语新闻表格视图
  • 设置两个新的原型单元格并使用我的SettingCell& amp;设置IBOutlets / Actions。 TimingCell课程。
  • IBOutlets从我的FrenchPressTableViewController连接到我的SettingCell.swift(后来我将这些插座重新用于我的Aero设置)。

我的FrenchPress设置工作正常enter image description here

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

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

最终产品如下所示:

enter image description here

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

  

致命错误:在解包可选值时意外发现nil

enter image description here

enter image description here

问题:

从我的调试器中可以看出,我的 SettingCell 类看起来像cell.switchLabel.text返回 nil 值。这对我来说没有意义,因为我正在尝试为它赋值。

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

1 个答案:

答案 0 :(得分:1)

将UITableViewCell类注册为tableView.registerClass(SwitchCell.self,forCellReuseIdentifier:"SwitchCell2")

时会出现此问题

删除该行tableView.registerClass(SwitchCell.self,forCellReuseIdentifier:"SwitchCell2")并在storyboard中设置cellIdentifier ..它可以正常工作