我有多个不同的自定义UIView
类,但它们都使用相同的基本外观,例如取消按钮,标题,圆角,阴影。
我想创建一个包含这些功能的容器,并在其上面添加自定义子视图。
我看到的唯一选项是始终添加该容器,并且每次使用不同的自定义子视图类传递它:
//on container
func setWithView(view:customViewA) { }
但如果我需要将更多参数传递给customA
怎么办?并直接从中获取委托?一切都必须通过这个容器(显然是糟糕的设计)
另一种方法是像往常一样添加自定义视图,并在每个内部添加该容器,问题是如果我在上面添加容器,我将不得不在每个自定义子视图上设置圆角和阴影等内容(因为容器在它上面而不在下面而且再次失去效果。
我该怎么做?
答案 0 :(得分:1)
为什么不能使用所有这些控件创建自定义UIView,并为每次使用多次子类化?
这样,所有自定义UIView类都将满足您的需求。
在" initWithFrame"中创建您的子视图方法,当你创建子类时,只需确保调用超类方法,这样每个子类都将创建你想要的控件。
import UIKit
protocol SuperClassProtocol {
func buttonClicked()
}
class SuperClassView: UIView {
var button = UIButton(type: .Custom)
var delegate : SuperClassProtocol?
required init(frame: CGRect) {
super.init(frame: frame)
addSubview(button)
button.addTarget(self, action: #selector(buttonTapped), forControlEvents: .TouchUpInside)
}
func buttonTapped() {
}
}
class SubclassView1 : SuperClassView {
required init(frame: CGRect) {
super.init(frame: frame) // here it creates the button
// add here more views
}
}
class SubclassView2 : SuperClassView {
required init(frame: CGRect) {
super.init(frame: frame) // here it creates the button
// add here more views
}
override func buttonTapped() {
self.delegate?.buttonClicked() // call protocol method from subclass
}
}