Ios 向现有类(如UIButton)添加自定义变量的正确方法是什么?
在我的应用程序中,我严重依赖于不同的视图类型,它们将持有不同的值。例如,对于一个按钮,我需要它有4个额外的变量,我这样实现它:Ios 向现有类(如UIButton)添加自定义变量的正确方法是什么?,ios,swift,Ios,Swift,在我的应用程序中,我严重依赖于不同的视图类型,它们将持有不同的值。例如,对于一个按钮,我需要它有4个额外的变量,我这样实现它: import UIKit class ActionButton: UIButton { var row = 0 var action = 0 var appDataId = "" var companyId = "" } 我用了一个ActionButton而不是UIButton 然而,我需要很多这些不同类型的视图,如标签按钮等,这
import UIKit
class ActionButton: UIButton {
var row = 0
var action = 0
var appDataId = ""
var companyId = ""
}
我用了一个ActionButton而不是UIButton
然而,我需要很多这些不同类型的视图,如标签按钮等,这可能会使项目复杂化
我的问题是,这是一个好的做法吗?有没有其他方法可以达到同样的效果
谢谢 方法0:您已经展示给我们的效果很好:D 这就是:对现有类进行子类化,并使用VAR对其进行自定义。您只需复制粘贴该按钮或将新创建的按钮类设置为
ActionButton
但在我看来,还有更有趣的解决方案
方法1:创建UIButton扩展,并使用关联对象代替存储的变量 还有另一种方法:
方法1.5(推荐解决方案): 扩展
UIView
。UILabel和UIButton以及许多其他UI元素都继承自它。从UIView
继承的所有类都可以访问您在UIView
扩展中放置的内容
奖励方法(如果您想或需要更进一步):创建自定义UIButton类并使用IBInspectables 然后,您将能够直接从Interface builder修改变量,这对于测试非常方便 例如:
//
// CustomButton.swift
import UIKit
@IBDesignable
class CustomButton: UIButton {
@IBInspectable var cornerRadius: CGFloat = 3.0 {
didSet {
setupView()
}
}
@IBInspectable var fontColor: UIColor = UIColor.whiteColor() {
didSet {
self.tintColor = fontColor
}
}
override func awakeFromNib() {
setupView()
}
override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
setupView()
}
func setupView() {
self.layer.cornerRadius = cornerRadius
}
@Desdenova,您不能在扩展中添加存储的属性,因此这一个词对提问者没有帮助。我想你应该澄清方法1是关于创建一个从UIButton继承的自定义类,OP从来没有问过是否可以直接从界面生成器编辑这些值。回答得很好。问题是关于添加存储属性的,不是吗?@werediver-yes!这一切都是关于回答和提供附加值。我将把重点从
IBInspectable
转移到子类化,作为添加存储属性的一种方式(顺便说一句,这可以或不能满足提问者,取决于子类化是否适合他的情况)。@werediver我目前正在改进我的答案!谢谢你的反馈。