在 iOS 的 UITabbarcontroller 中添加 Actionsheet

Posted

技术标签:

【中文标题】在 iOS 的 UITabbarcontroller 中添加 Actionsheet【英文标题】:Add Actionsheet in UITabbarcontroller in iOS 【发布时间】:2013-08-12 02:08:57 【问题描述】:

我在 UIViewController 中创建了 UITabbar。然后我向它添加了一个 UIActionSheet,但是当操作表出现时,当单击“取消”按钮的顶部时,它可以工作,但是当我单击“取消”的底部时,没有响应。我使用此代码添加操作表:

actionSheetDelete = [[UIActionSheet alloc] initWithTitle:@"Do you want to continue?" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Delete Item(s)" otherButtonTitles:nil];
actionSheetDelete.actionSheetStyle = UIActionSheetStyleBlackOpaque;
[actionSheetDelete showInView:self.view];
[actionSheetDelete release];

当我单击操作表时,我总是在控制台中显示此警报:

Presenting action sheet clipped by its superview. Some controls might not respond to touches. On iPhone try -[UIActionSheet showFromTabBar:] or -[UIActionSheet showFromToolbar:] instead of -[UIActionSheet showInView:].

你有什么建议吗?提前致谢

【问题讨论】:

How to display the UIActionSheet view from above Tab Bar Controller?的可能重复 【参考方案1】:

试试:

[actionSheetDelete showFromTabBar:self.tabBarController.tabBar];

【讨论】:

我试过你的代码,但它显示 errr:Assertion failure in -[UIActionSheet _presentSheetFromView:above:], /SourceCache/UIKit_Sim/UIKit-2380.17/UIActionSheet.m:1778 2013-08-12 14: 34:37.905 Cloudstringers[4253:c07] *** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无效参数不满足:视图!= nil”【参考方案2】:

您可以在 UITabBarController 的视图中显示它:

actionSheetDelete = [[UIActionSheet alloc] initWithTitle:@"Do you want to continue?" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Delete Item(s)" otherButtonTitles:nil];
actionSheetDelete.actionSheetStyle = UIActionSheetStyleBlackOpaque;
[actionSheetDelete showInView:self.tabBarController.view];
[actionSheetDelete release];

或者,一个更强大的版本可能是:

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

【讨论】:

showFromTabBar of UIActionSheet 旨在与 UITabbar 一起使用 是的,尽管我认为我更喜欢showInView:[UIApplication sharedApplication].keyWindow 方法。这样我的视图控制器就不必知道它是否在 UITabBarController 中呈现。 这不是正确的方法...查看我的答案。 我想这取决于你的目标。就我个人而言,我不喜欢编写取决于视图控制器呈现方式的视图控制器代码。【参考方案3】:

您正试图从视图本身显示操作表。考虑到您已经在视图中拥有了 UITabBarController,这无法完成。因此,您必须在显示时从选项卡栏中进行设置。这将确保按钮不会加载到选项卡栏的视图下方,并允许与选项卡栏关联的所有操作可用。

因此,你应该使用

[actionSheetDelete showFromTabBar:];

这样标签栏是显示​​操作表的初始位置 希望这会有所帮助!

【讨论】:

以上是关于在 iOS 的 UITabbarcontroller 中添加 Actionsheet的主要内容,如果未能解决你的问题,请参考以下文章

当 UIViewController 模态显示时,UINavigationController(在 UITabBarController 选项卡内)丢失堆栈

我想要一个没有 UITabBar 的 UITabBarController

尝试在控制器之间传递信息失败,但可以从 AppDelegate 到控制器

TabbarController 子控制器总是返回 nil - Swift 4

如何在 ios 7 和 ios6 中显示启动画面

iOS8 扩展 - 在 iOS 5/6/7 上会发生啥?