我真的不认为这是可行的,但我的老板仍然希望我提供一个链接来说明。他想要的是在用户按下主页按钮时添加一个“你确定要退出吗?”的警告,如果用户选择“否”,应用程序将不会变为非活动状态。 这是不可能的,对吗?
-(void)applicationWillResignActive:(UIApplication *)application
-(void)applicationWillTerminate:(UIApplication *)application
这些评论充满了关于如何使用此方法暂停任务、禁用定时器、降低帧速率、保存数据的内容 - 没有任何关于能够延迟执行或询问用户是否确定的信息。
整个想法与iPhone/Pad/Pod-Touch的用户体验相反。
根据App Store指南(稍作缩写):
修改设备上开关行为的应用将被拒绝
这是一种旨在更改主页按钮行为的提议,因此将被拒绝。
applicationWillResignActive
方法,从而禁用应用程序的触摸事件。然后调用applicationDidEnterBackground
方法,根据Apple文档:
您的委托的applicationDidEnterBackground:方法大约有5秒钟的时间来完成任何任务并返回。在实践中,此方法应尽快返回。如果该方法在时间耗尽之前没有返回,则您的应用程序将被终止并从内存中清除。
**
if it returns 2 then, it will identify the Home button is pressed
if it returns 1 then, it will identify the lock hardware button is pressed
**
因此,在您的情况下,您可以在**applicationDidEnterBackground**
方法中检查此条件。
- (void)applicationDidEnterBackground:(UIApplication *)application
{
NSLog(@"decision >> %d",[[UIApplication sharedApplication] applicationState]);
}
享受编程!
你需要证据向老板表明显然不是iOS开发者。
这应该就是你需要的所有证据。但要明确的是,苹果不允许应用程序以任何方式覆盖主页按钮。你可以在注销前放置操作表或弹出窗口进行警告,但一旦按下主页按钮,你必须放弃内存,应用程序将被关闭。
我知道这是一个老话题,但我只是想更新一下这个答案。在iOS 7中,这个方法不起作用了。 因此,当应用程序进入后台时,我使用屏幕亮度来区分Home和Lock按钮。
-(void)applicationDidEnterBackground:(UIApplication *)application {
if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateInactive) {
NSLog(@"按下睡眠按钮");
} else if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground) {
if ([[UIScreen mainScreen] brightness] > 0.0)
NSLog(@"按下Home键");
else
NSLog(@"按下睡眠按钮");
}
}
希望这对以后的任何人有所帮助。
我能找到的最好的参考资料是this one。虽然不是非常明确,但苹果公司的人机界面指南有几个标题:“始终准备停止”,接着是“不要通过编程退出”,这些都说明了主页按钮的作用以及你不应该实现自己的退出策略。