iOS的UIActionSheet取消按钮无法正常工作

13

我有一个问题: 这是我的代码:

UIActionSheet *popupQuery = [[UIActionSheet alloc] initWithTitle:@"Share the race" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Send with mail" otherButtonTitles:nil];
    popupQuery.actionSheetStyle = UIActionSheetStyleBlackTranslucent;
    [popupQuery showInView:self.view];
    [popupQuery release];

一切看起来都很好,两个按钮的展示正确,“发送邮件”按钮也没问题,但“取消”按钮只能在上方被点击...这里有一张图清晰地展示了该情况:

error click!

我该如何解决这个问题?

谢谢:)


2
这是一个答案:https://dev59.com/TnM_5IYBdhLWcg3w2XLw - Anton Sivov
3个回答

37

我猜测 UIActionSheet 的底部超出了视图的边界,因此无法响应触摸事件。

为了测试这个理论,请添加另一个按钮,看看所有上面的按钮是否正常工作,但是底部的按钮仍然表现出这种行为。

要解决这个问题,请确保视图延伸到屏幕底部。如果您的应用程序中有一个 tabBar,则会成为该问题的嫌疑犯。您可以使用 showFromTabBar: 如果您希望在 tabBar 上方显示 sheet,或使用 showFromToolbar: 从工具栏中显示它。

如果您没有底部栏,则我的猜测可能是错误的,我不知道原因。


2
谢谢!没错!我使用了 showFromTabBar 而不是 showInView,现在可以了! - ghiboz

7
您应该将操作表作为应用程序窗口的子视图显示,而不是当前视图的子视图。
UIActionSheet *actionSheet = [[UIActionSheet alloc] init...];

// ...

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

也许这会对其他人有所帮助。
愉快地编码 :)

2

使用

[actionSheet showFromTabBar:[[self tabBarController] tabBar]];

替代

[actionSheet showInView:self.view];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接