我有一个基于UISplitViewController的应用程序,它在Split的MasterViewController中显示一个ActionSheet。在iOS 5.1之前,我在分割显示的弹出窗口中显示操作表没有任何问题,但现在,显然新的“滑入式”方式显示MasterController有问题。
问题在于,当我尝试使用任何[actionSheet show ..]方法呈现ActionSheet时,应用程序崩溃并出现以下错误(确切的断言如下)。
*** Assertion failure in -[UIActionSheet presentSheetInPopoverView:], /SourceCache/UIKit_Sim/UIKit-1914.84/UIActionSheet.m:1816
sharedlibrary apply-load-rules all
Error in re-setting breakpoint 1:
Catchpoint 2 (throw)Error in re-setting breakpoint 1:
Error in re-setting breakpoint 1:
Current language: auto; currently objective-c
我谷歌这一段时间,但没有实质性答案..有人说它可能是一个错误 新的SplitViewController ......
想法?
提前谢谢!
更新:我发布了一个可能的通用解决方法,请查看。如果它适合你,请发表评论......如果没问题,我会在几天后将其标记为正确
答案 0 :(得分:4)
基于以上所述,并且对在WWDC帮助过我的Apple工程师表示了极大的敬意,这里的解决方案不仅可以解决这个问题,还可以将弹出窗口指向正确的按钮。
if (UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation]))
{
[actionSheet showFromBarButtonItem:self.actionSheetBarButtonItem animated:YES];
}
else
{
CGRect windowsRect = [self.navigationController.toolbar convertRect:self.actionSheetBarButtonItem.customView.frame toView:self.view.window];
[actionSheet showFromRect:windowsRect inView:self.view.window animated:YES];
}
答案 1 :(得分:1)
就像omz评论的那样,似乎这个问题已经在iOS 5.1.1中被Apple解决了。 因此,我决定将其添加到我的应用程序的更改日志的已知问题部分,解决方法是建议用户升级到iOS 5.1.1。
答案 2 :(得分:0)
另一个保持指向特定选项的弹出窗口影响的选项,您实际上可以执行以下操作: 1.创建自己的UIPopover 2.在UIPopover中创建自己的UIViewController。 3.在新创建的UIViewController中显示UIActionSheet。 4.来自UIActionSheet的大小的SetPopoverContentSize。 5.最后,连接你的UIActionsheet的Clicked方法来解除popover。
需要更多代码,但是大多数情况下都会提供与之前相同的功能,并且对UIActionsheet有一个很酷的小滑入效果。
答案 3 :(得分:0)
我认为以下是基于Tap Form答案的通用解决方案:
CGRect windowsRect = [actionSheetContainerView convertRect:viewToPresentActionSheet.frame toView:actionSheetContainer.window];
[actionSheet showFromRect:windowsRect inView:actionSheetContainer.window animated:YES];
这将重新显示窗口中的actionSheet,但指向正确的方向