如何将 Apple 的 UITableViewCell 源代码添加到我的项目中?

How can I add Apple's source code for UITableViewCell to my project?

在你告诉我我需要做的就是导入 UIKit 之前,我知道所有关于导入的事情,不,这不是我在这种情况下需要做的。感兴趣吗?使困惑?继续阅读...

我有两个不同但相似的自定义 UITableViewCell。两者都有一个 UILabel 和一个 UISwitch。第一版 DisplayCell 有第二个 UILabel,而第二版 EditCell 有第二个 UIPickerView。我如何使用它们是这样的,在我用作填写数据表单的静态 UITableView 中,DisplayCell 是显示所选值的标准视图。用户可以点击 DisplayCell 将其替换为 EditCell,然后使用 UIPickerView 选择一个新值并点击完成(顶部导航栏中的按钮)。 DisplayCell 然后返回,显示新选择的值。在任一版本中,用户都可以点击开关来切换 UIPickerView 中的值是否应该在表单的其他地方使用。

当需要为 tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> (UITableViewCell) 函数编写代码时,我决定重写我的代码,这样我就有了一个继承自 [=10 的 class、SwitchCell =] 并包含开关的 IBOutletIBAction,然后 DisplayCellEditCell 继承自 SwitchCell

这很好用,但是 DisplayCell 现在只不过是 UILabelIBOutlet,以及 DisplayCell 继承自 via 的 UITableViewCell SwitchCell 已经有两个 UILabel IBOutlettextLabeldetailTextLabel。创建 SwitchCell 的全部目的是通过只编写任何代码块一次来尝试最小化代码,这是我有点狂热的事情。因此,我非常希望 DisplayCell 中的 UILabel 使用 UITabelViewCell 中的 detailTextLabel IBOutlet,而不必创建 'redundant' UILabel IBOutlet 给它。

为了 link 到 superclass 中的 IBOutlet,您必须能够在辅助编辑器中调出该 superclass 的代码。然后你可以像往常一样控制+拖动和link。这意味着,在理论上,我相信应该可以将 link 我的 UILabel 转换为 UITableViewCelldetailTextLabel,如果我可以从源代码中访问相应的行UITableViewCell 在助理编辑器中。这可能吗?如果可能,怎么做?

哦,我只在 Swift 这个项目中工作,仅供参考。

tl;dr:使用 UITableViewCell 的默认 UILabel 确实比添加您自己的 UILabel 效率更高。

In order to link to an IBOutlet in a superclass you must be able to bring up the code for that superclass in the assistant editor.

嗯,那是不正确的。助理编辑器不需要 link 到超类中定义的 IBOutlet。但这在这里并不重要。

您不能在 Interface Builder 中 link detailTextLabel,因为它不是用 @IBOutlet 属性定义的。尽管可以覆盖 Swift 中的属性(因此您可以向其添加 @IBOutlet),但在这种情况下这不起作用,因为 IBOutlet 必须是可变的,并且超类已将变量定义为不可变的.

现在您可以通过在子类中添加自己的 setter 方法使 属性 可变来解决这个问题。我能够使用以下代码执行此操作:

var _detailTextLabel: UILabel?
@IBOutlet override var detailTextLabel: UILabel? {
    get {
        return super.detailTextLabel
    }
    set {
        _detailTextLabel = newValue
    }
}

我可以在 Interface Builder 中连接它。因此,也许我可以调整此代码以实际获得我想要的集合(我认为它不会像此处所示那样工作)。我们远远超出了常识性编码领域,我们只需要停止并放弃这个想法。

Thus I would very much rather have the UILabel in DisplayCell use the detailTextLabel IBOutlet from UITabelViewCell, rather than having to create a 'redundant' UILabel IBOutlet for it.

我能理解。我和肛门一样。 :-)

但是,如果您进行一些测试(或阅读 UITableViewCell 头文件),您会发现 UITableView 足够智能(足够优化?),不会实际将 UILabel 添加到内容视图,除非您尝试使用它。所以最坏的情况是你有一个未使用的 属性.

所以只添加自己的UILabel和属性确实不低效。