我有一个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];
}
答案 0 :(得分:190)
不要将当前视图控制器的视图传递给操作表,而是使用showFromTabBar:
的{{1}}方法。
正确的方式
这将给出正确的可点击区域:
UIActionSheet
错误的方式
这会将可点击区域放在错误的位置(如果您使用的是标签栏或工具栏):
[actionSheet showFromTabBar:self.tabBarController.tabBar];
如果您使用的是工具栏,请改用[actionSheet showInView:self.view];
方法。您需要对工具栏的引用,很可能是ivar
showFromToolbar:
我的旧答案也有效,但是很骇客:
刚刚找到了答案:
01-Dec-2008 10:22 PM Tom Saxton: 我再看一下这个bug,它似乎是tabbar的一个问题。
如果从作为UITabViewController的子视图的控制器中调用UIActionSheet的[sheet showInView:self.view],则取消按钮上的命中测试将失败在位于选项卡视图上方的UIActionSheet部分。 / p>
如果您改为传入UITabBarController的视图,那么UIActionSheet将按预期运行。
注意:在iPhone OS 2.1及更早版本中,当您传递子视图时,UIActionSheet从标签栏的顶部出现,但在2.2中,它从标签栏的底部出现,因此覆盖了标签图。
http://openradar.appspot.com/6410780
编辑:当我将视图更改为标签栏的视图时,它可以正常工作
[actionSheet showFromToolbar:self.myToolbar];
答案 1 :(得分:37)
我发现here的答案有效。
使用:[filterActionSheet showInView:[self.view window]]
;
我尝试了几种方法来到我的标签栏,他们设置这个应用程序似乎令人费解......
答案 2 :(得分:22)
改为使用:
[sheet showFromTabBar:theTabBar];
答案 3 :(得分:10)
这是修复。试试这个:
[actionsheet showInView:[UIApplication sharedApplication].keyWindow];
答案 4 :(得分:5)
我认为三个答案的组合是处理这个问题的正确方法:
[actionSheet showFromTabBar:self.tabBarController.tabBar];
即,使用showFromTabBar(这就是它存在的原因)并且你不需要像Nathan指出的那样使用parentViewController(事实上,self.parentViewController.tabBarController.tabBar为我返回nil。
答案 5 :(得分:1)
仅供参考 - 与标签栏上的UIDocumentInteractionController操作表相同的问题。使用以下内容进行修复。
UIViewController *parentView = [[self parentViewController] parentViewController];
[docController presentOptionsMenuFromRect: rect inView: parentView.view animated:YES];
答案 6 :(得分:-2)
编写简化代码
actionSheet.actionSheetStyle = UIActionSheetStyleDefault;
这项工作很好