Xcode 6.4,适用于 iOS8.4,启用 ARC
关于这个主题有很多帖子。对我来说似乎没有一个明确的解决方案,所以我花了几个小时进行测试,最后整理出一个可以解决 OP 问题的解决方案:
“我试图在显示另一个之前关闭 UIAlertView……”
正如OP所述,该".windows"
方法将不再有效。我读过的其他一些方法涉及为 UIAlertView 和其他使用通知创建类别;但是,它们对我来说太复杂了。
这是做什么...
1) 使您的类符合 UIAlertViewDelegate。
在您班级的“*.h”文件中...
@interface YourViewController : UIViewController <UIAlertViewDelegate>
这将允许您的类中的 UIAlertView 对象将消息发送到以下方法:
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
并让您的类中的 UIAlertView 对象从以下方法接收消息:
- (void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated:
对聪明人说一句,在某些情况下,您不必这样做,使您的类符合 UIAlertViewDelegate,但这是更安全的选择。这完全取决于您将如何在课堂上使用您的对象。
2) 将 UIAlertView 对象声明为类变量或属性。
创建属性的一些优点是您可以访问对象的一些 getter 和 setter。
作为实例变量,在你的类的“*.h”文件中......
@interface YourViewController : UIViewController <UIAlertViewDelegate>
{
UIAlertView *yourAlertView;
{
//other properties
@end
作为您班级的“*.h”文件中的属性(推荐) ...
@interface YourViewController : UIViewController <UIAlertViewDelegate>
{
//other instance variables
{
@property (strong, nonatomic) UIAlertView *yourAlertView;
@end
3) 避免生成对 UIAlertView 对象的多个引用。
例如,如果您有一个监视某个条件并显示警报的方法,则不要每次都实例化 UIAlertView 对象。相反,将其实例化一次-(void)viewDidLoad
并在需要的地方使用它。否则,这将阻止
- (void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated:
方法从将所需消息发送到正确的 UIAlertView 对象。
4) 将标签分配给 UIAlertView 对象并操作属性以更改标题、消息等。
self.yourAlertView.title = @"some title string";
self.yourAlertView.message = @"some message string";
5) 显示 UIAlertView 对象。
[self.yourAlertView show];
6) 在显示更改的 UIAlertView 对象之前关闭。
self.yourAlertView.title = @"some other title string";
self.yourAlertView.message = @"some other message string";
[self.yourAlertView show];
7) UIAlertView 在 iOS8 中被贬值了。
https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIAlertView_Class/index.html#//apple_ref/doc/uid/TP40006802-CH3-SW8
重要提示:UIAlertView 在 iOS 8 中已弃用。(请注意,UIAlertViewDelegate 也已弃用。)要在 iOS 8 及更高版本中创建和管理警报,请使用 UIAlertController 和 UIAlertControllerStyleAlert 的首选样式。
在 iOS 8 之前的 iOS 版本中运行的应用程序中,使用 UIAlertView 类向用户显示警报消息。警报视图的功能类似于操作表(UIActionSheet 的一个实例),但在外观上有所不同。
使用该类中定义的属性和方法来设置警报视图的标题、消息和委托并配置按钮。如果添加自定义按钮,则必须设置委托。委托应符合 UIAlertViewDelegate 协议。配置后使用 show 方法显示警报视图。