2011-09-13 95 views
4

我是iPhone開發的新手。任何人都可以告訴我如何解除UIActionSheet控制,當我在它外面輕拍?UIActionSheet關閉時點擊/水龍頭

在我的actionSheet中,我只有datePicker控件,它現在彈出了標籤欄控件,現在當用戶點擊它時,它應該關閉而不是使用actionSheet的取消按鈕。 問候

+1

UIActionSheet:UIView。我希望U不能得到Touch控制器OutSide – Srinivas

+0

現在看來這是iOS7的默認行爲。 – JohnK

+0

即使在iOS6中,它也不是iOS 7 iPhone上的默認行爲,只有在iPad – Alex

回答

0

我有你創建一個透明的按鈕,使您的視圖相同的大小,並將它送回的建議。創建一個方法來解除操作表並將其與大按鈕掛鉤。我從來沒有嘗試過,但我認爲這是值得一試的,因爲如果這樣做的話,你可以將它設置爲視圖中的一種通用方法,當用戶敲擊文本框之外(根據HIG)和UIActionSheet時,關閉鍵盤。

但是,我不知道是否適合像popover一樣關閉UIActionSheet。不管行動表是否需要一些輸入?否則,爲什麼蘋果會爲您提供一個取消按鈕?

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

添加工具欄與按鈕sismiss日期選擇器和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]; 

,並添加這些動作的完成按鈕

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

return YES; 

}

當完成按鈕被點擊

//動作 - (IBAction爲)DoneClicked { [自closeDatePicker:自]; menu.frame = CGRectMake(0,44,320,416);

}

-2

按照IOS 6,你可以實現它:

  1. 檢查buttonIndex(只運行你的東西,如果buttonIndex> = 0)。點擊外部動作表將使buttonindex = -1。
  2. 實施didDismissWithButtonIndex

請注意,這只是你實現UIActionSheetDelegate後的作品。

- (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

相關問題