在我的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];
因此,在某些情况下,也会从ViewController.m中调用iCloudTeavitused。问题在于,当它需要通过调用来关闭警报视图(如果一个碰巧被打开)时,
[alertView dismissWithClickedButtonIndex:alertView.cancelButtonIndex
animated:YES];
在iCloudTeavitused中,实际上不会调用此方法(例如,在创建另一个alertView
DOES时会调用)。
我的猜测是解雇旧版本alertView
不会被解雇,因为我是通过Localization.m来称呼它的。
我是对的,我在代码中做错了什么?
我认为这里的问题可能是您正在处理ViewController的多个实例。如果您使用ViewController的一个实例创建并显示警报视图,然后尝试通过另一个实例将其关闭,则该视图将不起作用。您应该将UIAlertView的实例保存在某个单例对象或您的应用程序委托上,并在呈现新对象之前引用该对象以将其关闭。或者您可以使用浏览窗口中的所有子视图并关闭UIAlertView(如果有)。
for (id aSubview in [iView valueForKey:@"subviews"]) {
if ([aSubview isKindOfClass:[UIAlertView class]]) {
[(UIAlertView *)aSubview dismissWithClickedButtonIndex:0 animated:NO];
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句