2011-09-13 7 views
4

私はiPhone開発の初心者です。私はそれの外でタップしたときに誰が私にUIActionSheetコントロールを解除する方法を教えてもらえますか?案内シートクリック/タップを外したときに閉じる

私のactionSheetには、datePickerコントロールのみがあり、タブバーコントロール上にポップアップするようになりました。ユーザーがそれを外にクリックするたびにactionSheetのキャンセルボタンを使用せずに閉じる必要があります。 よろしく

+1

UIActionSheet:UIView。私はUがタッチコントローラを外に出すことができないことを願っています – Srinivas

+0

これは今、iOS7のデフォルトの動作であるようです。 – JohnK

+0

iOS 7のiPhoneではデフォルト動作ではなく、iOS6でもiPad – Alex

答えて

0

私はあなたが透明ボタンを作成し、そのビューの同じ大きさにするアドバイスを持っており、それを送り返します。アクションシートを閉じるメソッドを作成し、大きなボタンに接続します。私はこれを試したことはありませんが、試してみる価値はあると思うのですが、もしうまくいけば、テキストフィールド(HIGによる)とUIActionSheetの外側をユーザがタップしたときに、キーボードを閉じるために一般的な方法として設定することができます。

しかし、私はUIActionSheetをpopoverと同じ方法で却下するのが適切かどうか分かりません。アクションシートは何があっても何らかの入力を必要としないのですか?それ以外の理由でAppleがあなたにキャンセルボタンを提供するのはなぜですか?

6

この魔法を試してみてください:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapOut:)]; 
    tap.cancelsTouchesInView = NO; 
    [actionSheet.window addGestureRecognizer:tap]; 
    [tap release]; 

そして、この方法:

-(void)tapOut:(UIGestureRecognizer *)gestureRecognizer { 
    CGPoint p = [gestureRecognizer locationInView:self.actionSheet]; 
    if (p.y < 0) { 
     [self actionPickerDone:nil]; 
    } 
} 
0

は、日付ピッカーとactionSheet

toolbarPicker = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; 
     toolbarPicker.barStyle=UIBarStyleBlackOpaque; 
     [toolbarPicker sizeToFit]; 
     NSMutableArray *itemsBar = [[NSMutableArray alloc] init]; 
     //calls DoneClicked 
     UIBarButtonItem *bbitem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(DoneClicked)]; 
     [itemsBar addObject:bbitem]; 
     [toolbarPicker setItems:itemsBar animated:YES]; 

     [menu addSubview:toolbarPicker]; 

をsismissし、[完了]ボタンのためにこれらのアクションを追加するボタンでツールバーを追加

-(BOOL)closeDatePicker:(id)sender{ 
[menu dismissWithClickedButtonIndex:0 animated:YES]; 
[txtDate resignFirstResponder]; 

return YES; 

}

行うボタンが をクリックする

//アクション - (IBAction)DoneClicked { [自己closeDatePicker:自己]。 menu.frame = CGRectMake(0、44、320、416);

} IOS 6につきとして

-2

、あなたはでそれを実装することができます

  1. チェックbuttonIndex(だけ自分のものを実行した場合buttonIndex> = 0)。外側のアクションシートをタップすると、buttonindex = -1となります。
  2. あなたがUIActionSheetDelegateを実装した後、これはのみ動作していることをdidDismissWithButtonIndex

注意を実装します。

- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex { 
    NSLog(@"action sheet was dismissed"); 
} 

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    //if user click outside the action sheet, button index will be -1 
    if(buttonIndex>0) 
    { 
     NSString *buttonTitle = [actionSheet buttonTitleAtIndex:buttonIndex]; 
    } 
} 
+0

であっても、アクションシートの外側をクリックすると、ボタンインデックス-1でデリゲートが呼び出されることはありません。キャンセルボタンのインデックスが設定されていない場合、-1のボタンインデックスが渡されることがドキュメントに記載されています。 – ram

9

さらに簡単な解決策は、キャンセルボタンを追加することです。これにより、タップバックグラウンドからディスマムに自動的に切り替わります。(スウィフト)

alertController.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: nil)) 
+0

ニースリマインダのヒント:D – Vahid

関連する問題