gpt4 book ai didi

ios - Swift - 初始化 UIView 的子类

转载 作者:可可西里 更新时间:2023-11-01 01:06:49 25 4
gpt4 key购买 nike

我有一个已经设置好的 View ,想把它包装在 UIView 的子类中。

class ElementView: UIView {
var selected = false
}

问题是我无法使用已经存在的 view 初始化 ElementView。Swift 也不允许给自己赋值。

init(view: UIView) {
//here I would have to call super.init(coder: NSCoder?) or super.init(frame: CGRect)
//none of which actually properly initializes the object
}

有什么想法可以实现吗?谢谢:)


澄清:

我会给你更大的背景,希望它更清楚:

我正在实现一个 UIScrollView 子类。 ScrollView 包含一个 UIView 对象数组,这些对象是从外部添加的(来自类的用户)。在我的自定义 UIScrollView 类中,我想为每个对象实现一个点击手势识别器。这已经完成了:

let singleTap = UITapGestureRecognizer(target: self, action: Selector("handleTap:"))
singleTap.cancelsTouchesInView = false
addGestureRecognizer(singleTap)

和处理程序:

func handleTap(recognizer: UITapGestureRecognizer) {
//some code to handle the tap
}

当我想处理点击时,问题就出现了,我想存储 View 的先前状态(之前是否点击过)以便在点击发生时切换该状态。我想根据 UIView 的状态对其执行不同的操作。

recognizer.view 返回识别器附加到的 View ,这是我需要的。但是,这样我就不可能为 UIView 实现状态。

这就是为什么我想为 UIView 实现一个自定义包装器,它应该包含状态信息(这也是一个问题)。这就是我提出这个问题的原因......

最佳答案

为了为 UIView 子类创建自定义初始化,您必须为 UIView 父类(super class)调用所需的初始化。此外,在创建自定义 init 时,您必须将 View 的 Frame 发送到父类(super class)。满足这些要求后,您可以自由地将任何参数传递给新创建的 init,包括点击识别器信息。

请记住,如果您要创建任何变量 - 在创建实例时它们必须不是 nil,因此在变量声明中您必须创建一些初始参数(例如 - 0 代表 Int 等) 以使初始化程序工作。这是示例代码:

var variableOne: Int = 0
var variableTwo: Int = 0

init(variableOne: Int, variableTwo: Int) {
self.variableOne = variableOne
self.variableTwo = variableTwo
super.init(frame: CGRectZero)
}

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}

关于ios - Swift - 初始化 UIView 的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24923256/

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