在我的ViewController.m中,我声明了
@interface ViewController ()
{
//...
UIAlertView * alertView;
//...
}
此处创建了alertview:
- (void)iCloudTeavitused {
//...
//If the alertview happens to be previously open, it will be dismissed (I use a corresponding flag to indicate this)
[alertView dismissWithClickedButtonIndex:alertView.cancelButtonIndex
animated:YES];
//...
alertView = [[UIAlertView alloc] initWithTitle:AMLocalizedString(@"iCloud is available", @"iCloud is available")
message:AMLocalizedString(@"This app stores", @"This app automatically stores your settings in the cloud to keep them up-to-date across all your devices")
delegate:nil
cancelButtonTitle:nil
otherButtonTitles:AMLocalizedString(@"OK_iCloudYES", @"OK"), nil];
[alertView show];
//...
}
我通过调用
来本地化单词LocalizationSetLanguage(@"en");
本地化发生在Localization.m中,我也这样做:
ViewController* viewController = [[ViewController alloc]init];
[viewController iCloudTeavitused];
因此,在某些情况下,iCloudTeavitused也会从ViewController.m调用。 问题是当它需要通过调用
来关闭警报视图(如果一个恰好打开)[alertView dismissWithClickedButtonIndex:alertView.cancelButtonIndex
animated:YES];
在iCloudTeavitused中,此方法实际上没有被调用(例如,创建另一个alertView
DOES 被调用。)
我的猜测是解雇旧的alertView
并没有被解雇,因为我是通过Localization.m来调用它的。
我是对的,我的代码中我做错了什么?
答案 0 :(得分:2)
我认为这里的问题可能是您正在处理ViewController的多个实例。如果使用ViewController的一个实例创建并显示警报视图,然后尝试通过另一个实例将其关闭,则它将无法工作。您应该将UIAlertView的实例保存在某个单例对象或您的app委托上,并在呈现新对象之前引用该对象以解除它。或者您可以使用浏览窗口中的所有子视图并关闭UIAlertView(如果有的话)。 / p>
for (id aSubview in [iView valueForKey:@"subviews"]) {
if ([aSubview isKindOfClass:[UIAlertView class]]) {
[(UIAlertView *)aSubview dismissWithClickedButtonIndex:0 animated:NO];
}
}
答案 1 :(得分:0)
通过编写以下内容使iCloudTeavitused
代表您的alertView:
alertView.delegate = self;
在alertView创建时。