如果我的应用移动到后台,我想关闭所有警报视图和操作表,如控件,所以我将此代码放在目标c
- (void)applicationDidEnterBackground:(UIApplication *)application
{
Class AVClass = [UIAlertView class];
Class ASClass = [UIActionSheet class];
for (UIView * subview in subviews){
NSLog(@"the class is %@",[subview class]);
if ([subview isKindOfClass:AVClass]){
[(UIAlertView *)subview dismissWithClickedButtonIndex:[(UIAlertView *)subview cancelButtonIndex] animated:NO];
} else if ([subview isKindOfClass:ASClass]){
[(UIActionSheet *)subview dismissWithClickedButtonIndex:[(UIActionSheet *)subview cancelButtonIndex] animated:NO];
} else {
[self checkViews:subview.subviews];
}
}
}
但没有任何反应我在ios 8中没有获得任何警报视图参考 请建议如何删除打开的警报视图。
答案 0 :(得分:0)
您拥有的代码永远不可靠,因为它取决于Apple实施细节。相反,你应该做一些事情,比如每次显示警报时发送通知并有一些东西(可能是应用代理,虽然这不是理想的,更好的是应用委托所拥有的类)观察这些通知并持有弱引用到警报视图(设置为通知对象)。
现在,当应用程序转到后台时,您可以迭代弱引用列表并关闭每个视图。有关实施细节,请参阅this answer。