2012-07-10 11 views
5

この質問にはすでに多くの時間が必要ですが、実際は今すぐ頭痛を与えています。UIViewのtouchesBeganは呼び出されていません

touchesBegan:は私のUIViewでは呼び出されていません。私はそれを私のアプリに追加する前に、まずトライアルプロジェクトを作った。トライアルプロジェクトでは、すべてが完璧に機能しました。私がしたのは、touchesBegan:が実装されているUIViewをサブクラス化し、このUIViewを別のビューのサブビューとして追加することでした。この2番目のビューには、一度クリックするとサブクラス化されたUIViewを示すボタンがあります。繰り返しますが、私はそれが欲しいと思っています。

私が既存のアプリで同じことをしたとき、touchesBegan:メソッド(と同様にtouchesMoved:)が呼び出されることはありません。誰も私になぜ説明することができますか?私はちょうどそれが決して呼ばれなかった理由を本当に理解しない。

+1

は、あなたのビューのための有効なユーザーとの対話のですか? – alinoz

+0

ユーザーインタラクションを有効にすると、それでもタッチが認識されません。それでも私の試作プロジェクトでは、ユーザーのやり取りを有効にしていないにもかかわらず、依然としてタッチを認識しています。 –

答えて

7

私はちょうどこれに対する答えを見つけました。ビューが別のUIView内にあり、userInteractionが無効になっていることは忘れています(デフォルトでは無効になっています)。したがって、このビューのuserInteractionを有効にすると、タッチが認識されます。

1

私の場合、background = UIColor.clearColor()touchesBeganが呼び出されなかった理由です。明らかに透明な要素には呼び出されません。

0

私はしばらくの間、この問題を苦労していました。私はそれを理解しています。私は、touchesBeganオーバーライド機能がメインビューで聞くと思う:ViewControllerのストーリーボードツリーの最初のもの!私は私のストーリーボードのイメージをより明確に投稿したいですが、私はできません! ;)

とにかく、IFあなたはサブビューを持っているかもしれませんが、メインビューをカバーするかもしれません...このようにして、タッチはメインビューに "届きません"。あなたはためにデフォルト ALLサブビューインスペクタ属性背景プロパティを設定する必要がありますこれを避けるために

。このようにして背景が透明になり、タッチがメインビューに達することができます。

-Add(背景が設定されている)あなたの最後のビューのアウトレット

-Add タップジェスチャー:あなたが透明に背景を設定したくない場合は

はあなたが行うことができるものがありますそれキーボードに

ESを配置タップ-handle

に認識装置。プロパティで

:のviewDidLoadで

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

():外

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

func handleTap(recognizer: UITapGestureRecognizer){ 
    self.view.endEditing(true) 
} 
関連する問題