Ios 将单个容器视图设置为不同自定义视图的好方法?
我有多个不同的自定义Ios 将单个容器视图设置为不同自定义视图的好方法?,ios,swift,Ios,Swift,我有多个不同的自定义UIView类,但它们都使用相同的基本外观,如取消按钮、标题、圆角和阴影。 我想用这些特性创建一个容器,并在上面添加自定义子视图 我看到的唯一选项是始终添加该容器,并且每次使用不同的自定义子视图类传递它: //on container func setWithView(view:customViewA) { } 但是如果我需要将更多参数传递给customA,该怎么办?还可以直接从it部门获得委托?所有东西都必须通过这个容器(显然是糟糕的设计) 另一种方法是像往常一样添加自定
UIView
类,但它们都使用相同的基本外观,如取消按钮、标题、圆角和阴影。
我想用这些特性创建一个容器,并在上面添加自定义子视图
我看到的唯一选项是始终添加该容器,并且每次使用不同的自定义子视图类传递它:
//on container
func setWithView(view:customViewA) { }
但是如果我需要将更多参数传递给customA
,该怎么办?还可以直接从it部门获得委托?所有东西都必须通过这个容器(显然是糟糕的设计)
另一种方法是像往常一样添加自定义视图,并在每个视图中添加该容器,问题是如果我在上面添加容器,我将不得不在每个自定义子视图上设置圆角和阴影(因为容器在其上方,而不是下方),并且再次失去效果
我该怎么做呢?为什么不能用所有这些控件创建一个自定义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
}
}
那么必须发送到父视图控制器的委托和其他参数呢?你能给出一个非常简单的结构示例吗?子类化对数据非常有效,但我始终不明白如何使用视图层次结构来实现这一点。只要将它添加到超类中,所有子类都将继承它。委托或参数。对不起,我看不出你打算怎么做。如果你能展示一个简单的例子,如何创建customViewA作为containerView的子类,并用所有必需的参数和委托设置customViewA。那么也许我不理解你。。。我添加了代码块以确保我们相互理解…谢谢,对不起,我太傻了,没有正确地思考它。我抓到你了。