UIActionSheet不显示 - 屏幕变暗

问题描述:

我有一个基于“基于窗口的应用程序”模板的iPhone应用程序,该应用程序使用带有一些嵌入式子视图的主视图。UIActionSheet不显示 - 屏幕变暗

对于某些操作,我需要用户确认。因此,我创建了一个UIActionSheet并询问用户反馈。

问题是,操作表完全不显示。相反,屏幕变暗。工作表和请求的按钮不显示。之后,应用程序挂起。作为通常显示操作表的动画的一部分,屏幕变暗是正常行为。

奇怪的是,如果在viewDidLoad方法中调用,相同的代码也可以正常工作。如果在启动需要确认操作的buttonPressed方法中调用它,则不起作用。你可以看到,我已经向UIActionSheetDelegateProtocol的协议处理程序添加了一些日志消息。将按预期方式调用“将呈现”和“已呈现”方法,但表单不显示。

有人知道,这里有什么问题吗?

+0

iphone-sdk-3标签?你实际上仍在使用3.x SDK? – 2010-10-13 22:16:36

我想知道 [actionSheet showInView: self.view];是否足以让actionSheet本身保留self.view。 编辑:保留从1跳到4的计数,所以在这里没有问题)

您是否检查过您的视图的尺寸?工作表位于视图内,但如果self.view会引用大滚动视图,则可能只在表面下方有一个工作表。总之,你确定self.view.frame和self.view.bounds在你所指的两种情况下有相同的值吗?它是相同的观点(当只是NSLog(@"%x",self.view) - 它是地址)?

编辑澄清:做

NSLog(@"%f %f %f %f", 
     self.view.frame.origin.x,self.view.frame.origin.y, 
     self.view.frame.size.width,self.view.frame.size.height); 

,并请告诉你的控制台上看到的。我得到你的“屏幕变暗”,如果我设置一个0,0,0,0帧或0,0,320,800帧,所以这可能是...

+1

那不是它,而是它把我推向了正确的方向。我现在解决了它。 问题是:我意外地将iPad中的MainWindow.xib复制到我的通用应用程序的iPhone部分。 iPad版本的尺寸为1024x768。 在“viewDidLoad”中,该窗口尚未由AppDelegate设置。因此,操作系统不会使用错误的坐标。之后,窗口被定义并且表单被渲染到错误的位置。有趣的是,self.view.frame一直是(0 20; 320 460),但view.window.frame是(0 0; 768 1024)。 谢谢。 – h2stein 2010-08-01 12:29:55

+4

只是一个方便的提示mvds:您可以使用NSStringFromCGRect(self.view.frame)而不是NSLogging逐个帧的每个值。 – 2010-10-06 20:07:35

+0

@Matt:谢谢你的提示! – mvds 2010-10-13 22:15:13

其实,我认为你已经击中了我见过的同样的问题。

在iOS系统中8 & 9,UIActionSheet确实得到显示哦......但背后屏幕键盘,所以你不能看到它。你只会看到屏幕的其余部分变暗。

这显然是苹果最新的UI改进理念,以保持屏幕整洁。 ;-)

简单的解决办法是显示前添加一行代码你UIActionSheet

[self.view endEditing:true]; 

这驳回了屏幕键盘,使您的再次动作优美片可见。

或者,我有documented here如何用UIAlertController替换UIActionSheet