如何将 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
=] 并包含开关的 IBOutlet
和 IBAction
,然后 DisplayCell
和 EditCell
继承自 SwitchCell
。
这很好用,但是 DisplayCell
现在只不过是 UILabel
的 IBOutlet
,以及 DisplayCell
继承自 via 的 UITableViewCell
SwitchCell
已经有两个 UILabel
IBOutlet
,textLabel
和 detailTextLabel
。创建 SwitchCell
的全部目的是通过只编写任何代码块一次来尝试最小化代码,这是我有点狂热的事情。因此,我非常希望 DisplayCell
中的 UILabel
使用 UITabelViewCell
中的 detailTextLabel
IBOutlet
,而不必创建 'redundant' UILabel
IBOutlet
给它。
为了 link 到 superclass 中的 IBOutlet
,您必须能够在辅助编辑器中调出该 superclass 的代码。然后你可以像往常一样控制+拖动和link。这意味着,在理论上,我相信应该可以将 link 我的 UILabel
转换为 UITableViewCell
的 detailTextLabel
,如果我可以从源代码中访问相应的行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和属性确实不低效。
在你告诉我我需要做的就是导入 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
=] 并包含开关的 IBOutlet
和 IBAction
,然后 DisplayCell
和 EditCell
继承自 SwitchCell
。
这很好用,但是 DisplayCell
现在只不过是 UILabel
的 IBOutlet
,以及 DisplayCell
继承自 via 的 UITableViewCell
SwitchCell
已经有两个 UILabel
IBOutlet
,textLabel
和 detailTextLabel
。创建 SwitchCell
的全部目的是通过只编写任何代码块一次来尝试最小化代码,这是我有点狂热的事情。因此,我非常希望 DisplayCell
中的 UILabel
使用 UITabelViewCell
中的 detailTextLabel
IBOutlet
,而不必创建 'redundant' UILabel
IBOutlet
给它。
为了 link 到 superclass 中的 IBOutlet
,您必须能够在辅助编辑器中调出该 superclass 的代码。然后你可以像往常一样控制+拖动和link。这意味着,在理论上,我相信应该可以将 link 我的 UILabel
转换为 UITableViewCell
的 detailTextLabel
,如果我可以从源代码中访问相应的行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和属性确实不低效。