更改 IBOutlet 按钮的类型
Change IBOutlet button's type
我正在努力实现一些我不确定是否可行的事情。我有一个 UITableViewCell
的 xib,其中有一个 UI 按钮,在故事板中分配了自定义 class,即 MainButtonSuperClass
。在 UITableViewCell.swift
插座连接如下,
@IBOutlet weak var button: MainButtonSuperClass!
许多不同的控制器正在配置此 TableViewCell
,但按钮的 UI 对于子 class 中定义的所有控制器都是不同的,即
final class MainButtonSubClass: MainButtonSuperClass {
override func configure(){//different style of button }
}
我怎样才能做到这一点?到目前为止,我已经尝试过,
let button: MainButtonSuperClass = MainButtonSubClass()
button.configure()
cell.button = button
不过这个不挑款式
编辑:
//tableview cell
class TableViewCell: UITableViewCell {
@IBOutlet weak var button: MainButtonSuperClass!
}
//Controller A wants default style of superclass (MainButtonSuperClass)
func configureButton(buttonCell: TableViewCell) {
buttonCell.button.configure() //works
}
//Controller B wants different style of subclass (MainButtonSubClass)
func configureButton(buttonCell: TableViewCell) {
let button: MainButtonSuperClass = MainButtonSubClass()
button.configure()
cell.button = button // doesn't work or adopts the style
}
//Custom button's classes
final class MainButtonSuperClass: UIButton {
override func configure(){//styled button }
}
final class MainButtonSubClass: MainButtonSuperClass {
override func configure(){//different style of button }
}
好的明白了,我们来试试这个
class 自定义类:UIButton {
class Type1Class: UIButton {
// Do all the setup here
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
class Type2Class: UIButton {
// Do all the setup here
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
}
然后你可以用下面的方式初始化它:
@IBOutlet weak var button: CustomClass.Type1Class!
希望对您有所帮助!
我找到了解决方案。我不会使用 IBOutlet,而只会使用 属性 的 UIButton,我将使用工厂方法动态更改它。使用 IBOutlet 是不可能的。
我正在努力实现一些我不确定是否可行的事情。我有一个 UITableViewCell
的 xib,其中有一个 UI 按钮,在故事板中分配了自定义 class,即 MainButtonSuperClass
。在 UITableViewCell.swift
插座连接如下,
@IBOutlet weak var button: MainButtonSuperClass!
许多不同的控制器正在配置此 TableViewCell
,但按钮的 UI 对于子 class 中定义的所有控制器都是不同的,即
final class MainButtonSubClass: MainButtonSuperClass {
override func configure(){//different style of button }
}
我怎样才能做到这一点?到目前为止,我已经尝试过,
let button: MainButtonSuperClass = MainButtonSubClass()
button.configure()
cell.button = button
不过这个不挑款式
编辑:
//tableview cell
class TableViewCell: UITableViewCell {
@IBOutlet weak var button: MainButtonSuperClass!
}
//Controller A wants default style of superclass (MainButtonSuperClass)
func configureButton(buttonCell: TableViewCell) {
buttonCell.button.configure() //works
}
//Controller B wants different style of subclass (MainButtonSubClass)
func configureButton(buttonCell: TableViewCell) {
let button: MainButtonSuperClass = MainButtonSubClass()
button.configure()
cell.button = button // doesn't work or adopts the style
}
//Custom button's classes
final class MainButtonSuperClass: UIButton {
override func configure(){//styled button }
}
final class MainButtonSubClass: MainButtonSuperClass {
override func configure(){//different style of button }
}
好的明白了,我们来试试这个
class 自定义类:UIButton {
class Type1Class: UIButton {
// Do all the setup here
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
class Type2Class: UIButton {
// Do all the setup here
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
}
然后你可以用下面的方式初始化它:
@IBOutlet weak var button: CustomClass.Type1Class!
希望对您有所帮助!
我找到了解决方案。我不会使用 IBOutlet,而只会使用 属性 的 UIButton,我将使用工厂方法动态更改它。使用 IBOutlet 是不可能的。