gpt4 book ai didi

ios - 将单个容器 View 设置为不同的自定义 UIView 的好方法?

转载 作者:行者123 更新时间:2023-11-28 06:21:49 27 4
gpt4 key购买 nike

我有多个不同的自定义 UIView 类,但它们都使用相同的基本外观,例如取消按钮、标题、圆角、阴影。我想创建一个具有这些功能的容器,并在其上方添加自定义 subview 。

我看到的唯一选项是始终添加该容器,并且每次都使用不同的自定义 subview 类传递它:

//on container
func setWithView(view:customViewA) { }

但是如果我需要将更多参数传递给customA 怎么办?并直接从它那里获得委托(delegate)?一切都必须通过这个容器(显然是糟糕的设计)

另一种方法是像往常一样添加自定义 View ,并在每个 View 中添加那个容器,问题是如果我在上面添加容器,我将不得不在每个自定义 subview 上设置圆角和阴影之类的东西(因为容器在它上面,而不是下面 ) 并且再次失去效果

我应该怎么做?

最佳答案

为什么不能创建一个包含所有这些控件的自定义 UIView,并在每次使用时将其子类化多次?

这样所有自定义 UIView 类都会有您需要的。

在“initWithFrame”方法中创建您的 subview ,当您创建子类时,只需确保调用父类(super class)方法,这样每个子类都会创建您想要的控件。

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
}
}

关于ios - 将单个容器 View 设置为不同的自定义 UIView 的好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43206583/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com