假设我有一个名为自定义视图的UITableViewCell类,其中包含GenericButton类的按钮,该按钮已通过编程方式在自动布局中定义
class View: UITableViewCell {
var button: GenericButton
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
button = GenericButton()
// blah blah blah constraints
}
}
现在让我说我有一个名为OtherView的View子类,我希望该按钮成为GenericButton的一个子类,名为CircleButton。
class OtherView: View {
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
button = CircleButton()
}
}
但是,我的视图仍然显示GenericButton,而不是CircleButton。我做错了什么?
答案 0 :(得分:0)
好的,我已经考虑了好几个小时了,得出的结论是这可能是最好的答案。
import UIKit
class View: UITableViewCell
{
var button: GenericButton! = nil
required init(coder aDecoder: NSCoder)
{
super.init(coder: aDecoder)
}
override init(style: UITableViewCellStyle, reuseIdentifier: String?)
{
super.init(style: style, reuseIdentifier: reuseIdentifier)
}
convenience init(button: Bool, style: UITableViewCellStyle, reuseIdentifier: String?)
{
self.init(style: style, reuseIdentifier: reuseIdentifier)
if button
{
button = GenericButton()
setConstraint()
}
}
private func setConstraint()
{
// blah blah blah constraints
}
}
class OtherView: View
{
required init(coder aDecoder: NSCoder)
{
super.init(coder: aDecoder)
}
override init(style: UITableViewCellStyle, reuseIdentifier: String?)
{
super.init(style: style, reuseIdentifier: reuseIdentifier)
}
convenience init(button: Bool, style: UITableViewCellStyle, reuseIdentifier: String?)
{
self.init(style: buttonWithStyle, reuseIdentifier: reuseIdentifier)
if button
{
button = CircleButton()
setConstraint()
}
}
}
答案 1 :(得分:-1)
我猜你在View
的视图层次结构中添加了按钮。如果是这样,button = CircleButton()
毫无意义。但是,您仍然可以通过OtherView
中的删除按钮执行此操作,然后重新添加。
class View: UITableViewCell {
var button: GenericButton
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
button = GenericButton()
addButton(button)
}
func addButton(button: UIButton) {
// add button into view hierarchy here
}
}
class OtherView: View {
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
button.removeFromSuperview()
button = CircleButton()
addButton(button)
}
}