9

この質問はすでに何度も回答されているに違いないことはわかっていますが、 が でtouchesBegan:呼び出されない理由がわかりませんUIView

アプリに追加する前に、いくつかのテストを行うためのトライアル プロジェクトを作成しました。私がしたことはUIView、が実装されている場所をサブクラス化しtouchesBegan:、これを別のビューのサブビューとして追加することでした。スーパービューには、クリックするとサブクラスが表示されるボタンがありUIViewます。すべてが期待どおりに機能します。

ただし、既存のアプリで同じことを行った場合、touchesBegan:メソッドとtouchesMoved:は呼び出されませんでした。メソッドの呼び出しを妨げている原因を説明できる人はいますか?

4

3 に答える 3

11

これに対する答えを見つけました。UIViewのスーパービューが無効に設定されていることに気付きましたuserInteraction(これはデフォルト値です)。そのため、スーパービューの を有効にするuserInteractionと、タッチが認識されるようになりました。

于 2012-07-12T09:10:01.503 に答える
1

私はしばらくこの問題に苦労していました...そして私はそれを理解します。touchesBeganオーバーライド関数は、ViewController のストーリーボード ツリーの最初のビューであるメイン ビューをリッスンしていると思います。ストーリーボードの画像をもっと明確にするために投稿したいのですが、できません! ;)

とにかく、サブビューがある場合、それらはメイン ビューをカバーする可能性があります...この方法では、タッチはメイン ビューに「到達」しません。

これを回避するには、 Attribute InspectorのBackgroundプロパティをDefault for ALL THE SUBVIEWSに設定する必要があります。このようにして、背景が透明になり、タッチがメイン ビューに到達できるようになります。

背景を透明に設定したくない場合は、次の方法があります。

-最後のビューのアウトレットを追加します (背景セットあり)

-タップジェスチャ認識機能を追加

-キーボードを配置したタップを処理します

エス。

プロパティで:

//The last view's outlet
@IBOutlet weak var ContainerView: UIView!

viewDidLoad() では:

let tap = UITapGestureRecognizer(target: self, action: Selector("handleTap:"))
self.ContainerView.addGestureRecognizer(tap)

外側:

func handleTap(recognizer: UITapGestureRecognizer){
    self.view.endEditing(true)
}
于 2015-10-02T09:31:19.360 に答える