isHighlighted
プロパティ onは、UIButton
ボタンが押されているかどうかにほとんど似ています。
Appleのドキュメントはそれについて曖昧です:
コントロールは、適切なタッチ イベントに応答して、この状態を自動的に設定およびクリアします。 https://developer.apple.com/documentation/uikit/uicontrol/1618231-ishighlighted
これを設定するためにシステムが呼び出すメソッドはどれですか?
touchesBegan
このメソッドをオーバーライドして防止できるため、 のようです。
しかし、驚くべきことに、手動で呼び出すtouchesBegan
と設定されません (たとえば、スーパービューから - 以下のコードを参照)。
のように単純ではないようtouchesBegan
です。可能なすべてのメソッドをオーバーライドしようとしました... pressesBegan
、pressesChanged
、pressesCancelled
、pressesEnded
、 touchesCancelled
、beginTracking
、continueTracking
などhitTest
。
効果しかtouchesBegan
ありませんでした。
スーパービューから touchesBegan を呼び出してみた方法は次のとおりです。
class MyView: UIView {
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
return self
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
guard let point = touches.first?.location(in: self) else { return }
for view in self.subviews {
if let button = view as? UIButton {
if button.frame.contains(point) {
button.touchesBegan(touches, with: event)
print("\(button.isHighlighted)") //prints false
}
}
}
}
}