Swift 子视图通知superview属性更改
因此,我有一个自定义的Swift 子视图通知superview属性更改,swift,uiview,Swift,Uiview,因此,我有一个自定义的UIView子类,它计算对它的接触量并将其存储在属性中。让我们称之为touchableView touchableView位于superview中,该superview具有用于显示该号码的标签。 我可以很好地访问touchableView的属性,但如何知道它何时发生了更改 正确的方法是什么 您可以使用模式来实现它我完全同意委托模式适合这种情况,我已经在代码中创建了一个示例: 例子: 假设,UIView的自定义子类称为CustomView。我们在CustomView.swi
UIView
子类,它计算对它的接触量并将其存储在属性中。让我们称之为touchableView
touchableView
位于superview中,该superview具有用于显示该号码的标签。
我可以很好地访问touchableView
的属性,但如何知道它何时发生了更改
正确的方法是什么 您可以使用模式来实现它我完全同意委托模式适合这种情况,我已经在代码中创建了一个示例:
例子: 假设,
UIView
的自定义子类称为CustomView
。我们在CustomView.swift
文件中有以下代码:
protocol CustomViewDelegate: class {
func touchableViewDidStartChange(_ customView: CustomView)
func touchableViewDidEndChange(_ customView: CustomView)
}
class CustomView: UIView {
private(set) var touchableView: Int = 0
weak var delegate: CustomViewDelegate?
override init(frame: CGRect) {
super.init(frame: frame)
addGestureRecognizer(
UITapGestureRecognizer(target: self, action: #selector(tapGestureHandler(_:)))
)
}
required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") }
func tapGestureHandler(_ sender: UITapGestureRecognizer) {
delegate?.touchableViewDidStartChange(self)
touchableView += 1
delegate?.touchableViewDidEndChange(self)
}
}
class ViewController: UIViewController, CustomViewDelegate {
private let customView: CustomView = CustomView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
override func viewDidLoad() {
super.viewDidLoad()
customView.delegate = self
customView.center = view.center
customView.backgroundColor = UIColor.yellow
view.addSubview(customView)
}
//MARK: Custom View delegate methods
func touchableViewDidStartChange(_ customView: CustomView) {
print("Touchable View did start change: \(customView.touchableView)")
}
func touchableViewDidEndChange(_ customView: CustomView) {
print("Touchable View did end change: \(customView.touchableView)")
}
}
下面是ViewController.swift
文件中的代码:
protocol CustomViewDelegate: class {
func touchableViewDidStartChange(_ customView: CustomView)
func touchableViewDidEndChange(_ customView: CustomView)
}
class CustomView: UIView {
private(set) var touchableView: Int = 0
weak var delegate: CustomViewDelegate?
override init(frame: CGRect) {
super.init(frame: frame)
addGestureRecognizer(
UITapGestureRecognizer(target: self, action: #selector(tapGestureHandler(_:)))
)
}
required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") }
func tapGestureHandler(_ sender: UITapGestureRecognizer) {
delegate?.touchableViewDidStartChange(self)
touchableView += 1
delegate?.touchableViewDidEndChange(self)
}
}
class ViewController: UIViewController, CustomViewDelegate {
private let customView: CustomView = CustomView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
override func viewDidLoad() {
super.viewDidLoad()
customView.delegate = self
customView.center = view.center
customView.backgroundColor = UIColor.yellow
view.addSubview(customView)
}
//MARK: Custom View delegate methods
func touchableViewDidStartChange(_ customView: CustomView) {
print("Touchable View did start change: \(customView.touchableView)")
}
func touchableViewDidEndChange(_ customView: CustomView) {
print("Touchable View did end change: \(customView.touchableView)")
}
}
现在,构建并运行该项目。您将看到touchableViewDidStartChange
和touchableViewDidEndChange
功能将在每次触摸customView
时打印touchableView
更改前后的值
它类似于使用
UITextFieldDelegate
,UITextViewDelegate
,UITableViewDelegate
,等等,对吗
有关协议和委托的详细信息
希望这对你有帮助 触摸的数量是多少?对不起,那是个奇怪的表达。触摸的次数是多少?或者是用户触摸的视图位置?这是在UIView上同时触摸的电流量。使用触摸开始计算触摸结束。