2009-08-19 6 views
1

私は単純なUIButtonを持っていて、ユーザーが触れたときに何かしたいと思っていますが、ボタンの外に指を動かして画面に触れません。だから私はUIControlEventTouchUpOutsideイベントを聞く必要があるようです。私のビューコントローラで奇妙なUIButtonの動作:それは正常ですか?

、私はこれをしなかった:今、何を推測

- (void)onTouchUpOutside { 
    NSLog(@"touchUpOutside"); 
} 

UIButton *bt = [[UIButton alloc] initWithFrame:rect]; 
[bt setBackgroundColor:[UIColor whiteColor]]; 
[bt addTarget:self action:@selector(onTouchUpOutside) forControlEvents:UIControlEventTouchUpOutside]; 
[self.view addSubview:bt]; 

と、対応するアクションメソッド?私は、ボタンをタッチし、それから外に指をドラッグし、画面を触れないと、メッセージは記録されません。実際には、私の指が本当にボタンの上にあっていなくても、UIControlEventTouchUpInsideイベントが起こったことを私に記録するでしょう。タッチしている間に指の幅を約150%動かすことができ、タッチしている間に指がボタンに入っていることがわかります。しかし、遠くに(遠くに)遠くに移動すると、「touchUpOutside」ログメッセージが表示されます。それで、リンゴからのもう一つの狂気、それは-touchesMovedやそのようなものの遅れですか?それとも私は何か悪いことをしましたか?

答えて

2

これは、通常のUIKitの動作であることがわかりました。奇妙だが普通だ。ユーザは、タッチを「キャンセル」するために指を遠くに移動させなければならない。指がタッチされたボタンから十分離れておらず、リフトすると、touchUpInsideイベントが発生します。これを言っているリンゴのテキストを見つけることができませんでしたが、私はいくつかのプロジェクトで何度かテストしました。新しいUButtonとIBActionがあります。また、リンゴのサンプルコードのいくつかは、この同じ奇妙な動作を示しています。

2

touchUpInsideは、人が大きくて不正確な指を持っているため、ボタンの外に少し指を動かすと発砲します。

あなたは本当にこの動作を無効にしたい場合は、touchUpInsideハンドラでタッチの位置を確認し、その後、ボタンのbounds外であればタッチそれを直接touchUpOutsideハンドラを呼び出します。

+0

これは使いやすさのためです...私はちょうどその領域がとても信じられないほど巨大だと思っています;-) –

+2

人々はあなたが思うよりも太い指を持っています。 –

関連する問題