当iOS4应用程序进入后台时,如何关闭UIActionSheet

3
在我正在开发的应用中,有操作表和警告视图,我希望当应用程序进入非活动/后台状态时它们被关闭。
我使用UIApplicationWillResignActiveNotification而不是UIApplicationDidEnterBackgroundNotification,因为我希望代码与iOS3.2兼容。
-(void)applicationWillResignActive:(Notification *)notification{
    if (self.actionSheet && self.actionSheet.visible){
        NSLog(@" actionSheet is Visible");
        [self.actionSheet dismissWithClickedButtonIndex:0 animated:NO];
    }
}

在模拟器中测试(iphone 3.2,iOS4),当操作表可见时,我按下主页按钮,但没有看到“操作表可见”消息。然而,当我重新打开应用程序并再次使用主页按钮关闭它时,我会收到“操作表可见”消息。

这表明第一次操作表的visible属性没有被设置。可能有一个延迟导致属性没有被设置吗?实际上,我在显示操作表的方法中放置了一条消息。

[self.actionSheet showInView:self.parentViewController.tabBarController.view];
if (self.actionSheet.Visible) NsLog(@" action Sheet visible");

即使在这里,我也没有收到消息。可见属性是在哪里/何时设置的?我在尝试解散操作表时是否做错了什么基本错误?我在SO上看到了类似的非常好和详细的解决方案,用于解散alertView...但它们似乎没有涵盖此问题。任何帮助将不胜感激。


为什么你关心在iOS 3.2上取消操作表?当用户退出时,应用程序将被终止,所以这并不重要。你最好使用 UIApplicationWillResignActiveNotification - Anshu Chimala
嗨,我同意在iOS3.2中不需要对actionSheet做任何操作。但我的问题出在iOS4中。抱歉,我之前的信息应该写成iPhone3G,而不是iPhone 3.2。 - prd
1个回答

2
为什么需要检查它是否可见?实际上,为什么需要检查它是否为空?您可以只放置 [self.actionSheet dismissWithClickedButtonIndex:0 animated:NO];,如果操作表存在,则应该正常工作,如果不存在,则只会在 nil 上调用该方法,什么也不会发生。

事实上,我看到了苹果的示例代码首先检查alertView是否可见,然后调用dismiss方法。 - prd

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