2011-12-30 7 views
2

アクションシートの上をタップするとアクションシートを離してしまうようなアクションシートにアクションを設定したい。
アクションシートにキャンセルボタンを追加したくないので、これをしたいです。キャンセルボタンの代わりに、休憩エリアビューをタップしてアクションシートをキャンセルすることができます。
iPhoneでこれを行う方法を教えてください。
おかげユーザーがiPhone上で上のビューをタップしたときにUIActionSheetを非表示にする

+0

なぜ標準インターフェイスのパラダイムから逸脱していますか? UIActionSheetのプレゼンテーション形式とUIを再設計することなくこれを行うと、ユーザーに混乱が生じる可能性があります。 –

答えて

8
// For detecting taps outside of the alert view 
-(void)tapOut:(UIGestureRecognizer *)gestureRecognizer 
{ 
    CGPoint p = [gestureRecognizer locationInView:self]; 
    if (p.y < 0) 
    { // They tapped outside 
     [self dismissWithClickedButtonIndex:0 animated:YES]; 
    } 
} 

-(void) showFromTabBar:(UITabBar *)view 
{ 
    [super showFromTabBar:view]; 

    // Capture taps outside the bounds of this alert view 
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapOut:)]; 
    tap.cancelsTouchesInView = NO; // So that legit taps on the table bubble up to the tableview 
    [self.superview addGestureRecognizer:tap]; 
    [tap release]; 
} 

hereを参照してください。

これは既にiPadで発生しています。

+0

[self.window addGestureRecognizer:tap];ナビゲーションバーまたはステータスバーのタップが消えることを意味するので、はるかに信頼性が高くなります。 – malhal

1
  1. 実装に応じて、(UITapGestureRecognizerを介して)親ビューまたは(touchesBegan:メソッドをオーバーライドを介して)親ビューコントローラ上の捕獲タップボタン。
  2. [UITouch locationInView:]または[UITapGestureRecognizer locationInView:]メソッドを使用して、必要に応じてタップの位置をキャプチャします。
  3. (タップした場所があなたのアクションシートからあまり離れていない場合)は、[UIAction dismissWithClickedButtonIndex:animated:]を呼び出してアクションシートを却下してください。
関連する問題