所以我有一个UIView
的自定义子类,它计算触摸量并将其存储在属性中。让我们称之为touchableView
touchableView
位于超级视图中,其中包含用于显示该数字的标签。
我可以访问touchableView
的财产,但我怎么知道它何时发生了变化?
这样做的正确方法是什么?
答案 0 :(得分:2)
我完全同意Taras Chernyshenko委托模式适合这种情况,我在代码中创建了一个示例:
假设您的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)
}
}
以下是ViewController.swift
文件中的代码:
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
函数会在每次触摸touchableView
时更改customView
之前和之后的值。
它类似于使用UITextFieldDelegate
,UITextViewDelegate
,UITableViewDelegate
等,对吗?
See here了解有关协议和代理的更多信息。
希望这能帮到你!
答案 1 :(得分:0)
您可以使用delegate模式来实现它