簡體   English   中英

UIActionSheet取消按鈕奇怪的行為

[英]UIActionSheet cancel button strange behaviour

我有一個UIBarButtonItem打開一個動作表,為用戶提供有關做什么的選擇。 除非我嘗試點擊“取消”按鈕,否則一切都按預期工作。 按鈕的目標似乎已從應該的位置向上移動。 我只能通過單擊“取消”和“確定”按鈕中間的某個位置來激活它。

我已經嘗試過在其他應用程序中的動作表,它們工作正常,所以它不僅僅是我的大拇指。 操作表在UIViewController中打開

- (void)showOpenOptions
{
    UIActionSheet *sheet = [[UIActionSheet alloc] 
    initWithTitle:NSLocalizedString(@"Open link in external application?", @"Open in external application")
    delegate:self
    cancelButtonTitle:NSLocalizedString(@"Cancel", @"Cancel")
    destructiveButtonTitle:NSLocalizedString(@"Open Link", @"Open Link")
    otherButtonTitles:nil];

    [sheet showInView:self.view];
    [sheet release];
}

不要將當前視圖控制器的視圖傳遞給操作表, showFromTabBar:使用UIActionSheetshowFromTabBar:方法。

正確的方式
這將給出正確的可點擊區域:

[actionSheet showFromTabBar:self.tabBarController.tabBar];

錯誤的方法
這會將可點擊區域放在錯誤的位置(如果您使用的是標簽欄或工具欄):

[actionSheet showInView:self.view];

如果您使用的是工具欄 ,請改用showFromToolbar:方法。 你需要一個工具欄的引用,很可能是一個ivar

[actionSheet showFromToolbar:self.myToolbar];

我的舊答案也有效,但是很黑:

剛剛找到一個可能的答案:

2008年12月1日下午10:22 Tom Saxton:我再看一下這個bug,這似乎與tabbar有關。

如果從作為UITabViewController的子視圖的控制器中調用UIActionSheet的[sheet showInView:self.view],則取消按鈕上的命中測試將失敗在位於tabbar視圖上方的UIActionSheet部分。

如果您改為傳入UITabBarController的視圖,那么UIActionSheet將按預期運行。

注意:在iPhone OS 2.1及更早版本中,當您傳遞子視圖時,UIActionSheet從選項卡欄的頂部出現,但在2.2中,它從選項卡欄的底部出現,因此覆蓋了選項卡視圖。

http://openradar.appspot.com/6410780

編輯:當我將視圖更改為標簽欄的視圖時,它可以正常工作

[sheet showInView:self.parentViewController.tabBarController.view];

我找到了答案在這里工作的。

使用: [filterActionSheet showInView:[self.view window]] ;

我嘗試了幾種方法來到我的標簽欄,他們的方式這個應用程序設置它似乎令人費解......

而是使用:

[sheet showFromTabBar:theTabBar];

這是修復。試試這個:

[actionsheet showInView:[UIApplication sharedApplication].keyWindow];

我認為三個答案的組合是正確的處理方式:

    [actionSheet showFromTabBar:self.tabBarController.tabBar];

即,使用showFromTabBar(這就是為什么它存在),你不需要像Nathan指出的parentViewController(事實上,self.parentViewController.tabBarController.tabBar為我返回nil。

僅供參考 - UIDocumentInteractionController的操作表踩在標簽欄上有同樣的問題。 使用以下內容進行修復。

UIViewController *parentView = [[self parentViewController] parentViewController];
[docController presentOptionsMenuFromRect: rect inView: parentView.view animated:YES];

編寫簡化代碼

 actionSheet.actionSheetStyle = UIActionSheetStyleDefault;

這項工作很好

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM