更改 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 是不可能的。