我有一个带有4个UIButton的UIViewController。用户可以点击任何这些UIButton并弹出UIView。我想在持有UIViews的类上添加didDisappear()
和didDisappear()
函数,具体取决于用户操作。如何在不使用枚举的情况下调用func didDisappear(view: EnumViews){
switch view{
case view0: myClassWithView0.didDisappear()
case view1: myClassWithView1.didDisappear()
case view2: myClassWithView2.didDisappear()
case view3: myClassWithView3.didDisappear()
}
}
,例如:
protocol ViewProtocol{
func didAppear()
func didDisappear()
}
现在我得到4次重复数据。我知道我的班级有一个UIView的功能,但是如何调用呢?我制定了一个协议:
@IBAction func bringNewUIView(_ sender: UIButton) {
let newView = myArrayOfClassesWithUIView[sender.tag]
newView.didAppear()
}
我让那些持有UIView符合该协议的类。但是我不知道如何使用它,当我创建类时出现错误:
'myClassWithUIView'无法构造,因为它无法访问 初始化
这些类都在一个数组中,我可以识别哪个UIView需要从sender.tag中弹出。理想情况下,我希望有这样的东西:
var plistDictionary:Dictionary<String, Any>? {
get {
guard
let path = Bundle(for: type(of: self)).path(forResource: "config", ofType: "plist"),
let configDictionary = NSDictionary(contentsOfFile: path)
else { return nil }
return configDictionary as? Dictionary
}}
答案 0 :(得分:1)
你这里有很多事情要做。我将从简单的开始。
'myClassWithUIView'无法构造,因为它没有可访问的初始值设定项
这只是意味着您的班级没有初始化程序。因此,在myClassWithUIView
实施中,您需要init
。我无法真正帮助你构建init
,因为我不知道该类的结构如何,但我认为这是你知道如何做的事情。
您的@IBAction
似乎很好。一旦你有一个类的数组似乎它应该工作。如果不是这样,请编辑您的帖子。
最后,对于您的didDisappear
问题,您可以执行以下操作:
func didDisappear(view: EnumViews) {
//Check to see if this view conforms to your ViewProtocol (that's not a good name, btw)
if let myClass = view as? ViewProtocol {
//Since it does conform to ViewProtocol you can call didDisappear on it
myClass.didDisappear()
}
}
或者,如果您已经知道didDisappear
函数始终在符合ViewProtocol
的视图中传递,为什么不只是更改参数并使其更容易?
func didDisappear(view: ViewProtocol) {
view.didDisappear()
}