1

isHighlightedプロパティ onは、UIButtonボタンが押されているかどうかにほとんど似ています。

Appleのドキュメントはそれについて曖昧です:

コントロールは、適切なタッチ イベントに応答して、この状態を自動的に設定およびクリアします。 https://developer.apple.com/documentation/uikit/uicontrol/1618231-ishighlighted

これを設定するためにシステムが呼び出すメソッドはどれですか?

touchesBeganこのメソッドをオーバーライドして防止できるため、 のようです。

しかし、驚くべきことに、手動で呼び出すtouchesBeganと設定されません (たとえば、スーパービューから - 以下のコードを参照)。

のように単純ではないようtouchesBeganです。可能なすべてのメソッドをオーバーライドしようとしました... pressesBeganpressesChangedpressesCancelledpressesEnded、  touchesCancelledbeginTrackingcontinueTrackingなど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
                }
            }
        }
    }
}
4

0 に答える 0