2016-09-15 5 views
0

私はUIButtonを持っています。これは「確認」ボタンとして機能しています。基本的には、2回のタップでアクションをトリガする必要があるので、最初にタップすると、画像は「ありますか」というタイプの画像に変わります。その時点で、2回目のタップでアクションがトリガーされます。ビュー外のUITouchを検出する

これはうまくいきますが、ボタンの外側の任意の場所をタップすると最初の画像に戻って再びタップする必要があるように設定します。

ユーザーがUIButtonの外部に接触したかどうかを検出する方法はありますか。おそらくそれに "フォーカス"を与え、フォーカスの出口を確認する方法はありますか?

私はUITouchと考えていましたが、そのイベントは、あなたが触っているビューにそのイベントを送信するだけです。

+0

2番目のタッチが他のコントロール(ボタン、テキストフィールドなど)にある場合、タッチがそのコントロールに対して通常の効果を持たせたいのか、それとも完全に無視するのですか? –

答えて

2

UITapGestureRecognizerボタンのスーパービュー(おそらくビューコントローラのコンテンツビュー)にアタッチします。userInteractionEnabledをtrueに設定します。タップジェスチャ認識器のハンドラにボタンをリセットするコードを記述します。

+0

奇妙なことに、私が私の仕事を始めたとき、私はここで何の答えも見ませんでした。それを削除します。 – danh

0

ビューが押されたときに、あなたがUIControlEvent.touchUpOutside代わり

button.addTarget(self, action:<SELECTOR>,forControlEvents: UIControlEvents.TouchUpOutside) 
0

プレスがすることができますビューの外にあるときに表示したい場合は、UITapGestureRecognizerを追加することができます

のためでUIControlEvent.touchUpInsideを使用することができます知っているようにボタンイベント外ユーザーのタッチを取得するために

@interface YourViewController() 
@property NSInteger tapCount; 
@property (weak) UITapGestureRecognizer *gestureRecognizer; 
@end 

は追加UITapGestureRecognizer

- (IBAction)buttonPressed:(id)sender { 
    self.tapCount ++; 
    if (self.tapCount == 1) { 
     // change button label, image here 

     // add gesture gesture recognizer 
     UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapOutSideAction)]; 
     [tap setNumberOfTapsRequired:1]; 
     [[[UIApplication sharedApplication] keyWindow] addGestureRecognizer:tap]; 
     self.gestureRecognizer = tap; 
    } else if (self.tapCount == 2) { 
     // tap two times 

     self.tapCount = 0; 
    } 
} 

- (void)tapOutSideAction { 
    // reset button label, image here 

    // remove gesture recognizer 
    self.tapCount = 0; 
    [[[UIApplication sharedApplication] keyWindow] removeGestureRecognizer:self.gestureRecognizer]; 
} 
関連する問題