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。那么也许我不理解你。。。我添加了代码块以确保我们相互理解…谢谢,对不起,我太傻了,没有正确地思考它。我抓到你了。