gpt4 book ai didi

ios - iPad 在 subview Controller 中显示 UIActionSheet 时崩溃

转载 作者:可可西里 更新时间:2023-11-01 17:10:54 26 4
gpt4 key购买 nike

如果有人问过这个问题,我深表歉意,但我似乎无法在任何地方找到它。我什至在演示项目中重新创建了我的问题,以防你们中的任何人想亲眼看到它,尽管我不知道应该将它发布到哪里。

我有一个基于 xibless UINavigationController 的应用程序。我的一些子 ViewControllers 在顶部右侧有一个按钮,然后显示 UIActionSheet。我的应用程序是为 iPhone 和 iPad 设计的,所以当我准备好显示 UIActionSheet 时,我会:

UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:[NSString stringWithFormat:@"%@ Menu", [self title]] delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Email", @"Print", nil];
[actionSheet setActionSheetStyle:UIActionSheetStyleDefault];
if ([actionSheet respondsToSelector:@selector(showFromBarButtonItem:animated:)])
[actionSheet showFromBarButtonItem:[[self navigationItem] rightBarButtonItem] animated:YES];
else [actionSheet showInView:[self view]];
[actionSheet release];

在 iPad 上,我试图显示附加到右栏按钮的 UIActionSheet,而在 iPhone 上,它应该从底部滑入。所有这一切都非常完美。

不幸的是,如果您点击按钮并在 iPad 上显示菜单,但随后点击应用程序左上角的后退按钮,则菜单不会消失。相反,UINavigationController 尽职尽责地弹回并且 UIActionSheet 仍然存在。如果您尝试点击菜单上的某些内容,您当然会崩溃。如果用户点击了屏幕上的其他任何东西而不是“后退”按钮,则菜单会正确关闭。

如果您在 iPhone 上尝试此测试,一切都会按预期进行。没有问题。

我的演示项目有一个 AppDelegate 和一个 ViewController,仅此而已。 AppDelegate 构建了 NSDictionaries 的 NSDictionary,这样我就有了一个可以递归演示问题的模型。 ViewController 显示字典的所有键,如果相应的值是 NSDictionary,您可以点击它以向下钻取。

最佳答案

这是一个有趣的问题。这是 UIActionSheet Class Reference 的内容不得不说。

On iPad, this method presents the action sheet in a popover and adds the toolbar that owns the button to the popover’s list of passthrough views. Thus, taps in the toolbar result in the action methods of the corresponding toolbar items being called. If you want the popover to be dismissed when a different toolbar item is tapped, you must implement that behavior in your action handler methods.

因此,当您显示操作表时,它会自动创建一个 UIPopoverController 并将包含的工具栏(或导航栏)设置为弹出窗口的直通 View ,从而允许触摸事件继续。我认为最好的办法是为您的操作表创建一个实例变量,如果它在 -viewWillDisappear: 中可见,则强制关闭它。

- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];

if (self.actionSheet.window) // If action sheet is on screen, window is non-nil
[self.actionSheet dismissWithClickedButtonIndex:self.actionSheet.cancelButtonIndex animated:animated];
}

关于ios - iPad 在 subview Controller 中显示 UIActionSheet 时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8404261/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com