iOS9如何调用NSObject类中的UIAlertviewController?
Posted
技术标签:
【中文标题】iOS9如何调用NSObject类中的UIAlertviewController?【英文标题】:How to call UIAlertviewController in NSObject Class in iOS9? 【发布时间】:2015-10-19 06:13:44 【问题描述】:由于在 ios9 中不推荐使用警报视图,我在通过 NSObject 类显示警报时遇到了困难 因为在 UIAlertView 中有一种方法可以显示警报 [objaler show] ;但在 iOS 9 中显示警报 我们必须使用 presentViewController 这样任何人都可以告诉我如何在 nsobject 类中显示警报视图控制器。
我想在 NSObject 类中调用的代码如下:
UIAlertController *alert= [UIAlertController
alertControllerWithTitle:@"Login"
message:@"Enter your credentials here"
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* ok = [UIAlertAction actionWithTitle:@"Done" style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action)
//Do Some action here
];
UIAlertAction* cancel = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action)
NSLog(@"cancel btn");
[alert dismissViewControllerAnimated:YES completion:nil];
];
[alert addAction:ok];
[alert addAction:cancel];
[self presentViewController:alert animated:YES completion:nil];
我的问题是我想在 NSObject 类中调用它。 该怎么做?
【问题讨论】:
为什么不尝试使用 NSNotification?在你的 NSObject 类上,发布一个通知,然后在 UIViewController 类上添加一个观察者,它将调用一个选择器来显示你的 UIAlertAction。 @JohnRusselUsi 好主意。 【参考方案1】:试试这个:
你的 ObjectClassName.h 类
#import <UIKit/UIKit.h>
+ (void)showAlertTitle:(NSString *)title withMessage:(NSString *)message onView:(UIViewController *)viewController;
你的 ObjectClassName.m 类
+ (void)showAlertTitle:(NSString *)title withMessage:(NSString *)message onView:(UIViewController *)viewController
UIAlertController * alert= [UIAlertController
alertControllerWithTitle:title
message:message
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* okButton = [UIAlertAction
actionWithTitle:@"OK"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action)
//Handel your yes please button action here
[alert dismissViewControllerAnimated:YES completion:nil];
];
[alert addAction:okButton];
[viewController presentViewController:alert animated:YES completion:nil];
当您调用导入您的对象类时:
#import "ObjectClassName.h";
[ObjectClassName showAlertTitle:@"Alert" withMessage:@"Alert Message" onView:self];
【讨论】:
好吧,如果他有任何可用的,OP 可以简单地将视图控制器推送到警报控制器。这并不能解决问题的关键。【参考方案2】:这就是重点——Apple 告诉你可能不应该这样做。
在这种情况下,您可以做的最好的事情是遍历视图控制器的层次结构(从 UIWindow
的 -rootViewController
开始),并至少将其呈现在***控制器上。
一般而言,您能做的最好的事情就是直接在适当的视图控制器中调用此类警报。
【讨论】:
我知道我们不能这样做,而且您的回答定义我们必须使用 viewControllers Hierarchy,因此您的解决方案和我的解决方案相同,我正在定义代码,而您在理论上编写. NSObject 类没有 UI 是常识,所以你不能这样做。所以请先理解问题和答案。 我理解了这个问题。下面的答案不是解决方案,它只是通过方法分配视图控制器的包装,而不是直接分配和调用它。节省了 2 行代码,但找到合适的视图控制器来呈现的问题仍然存在。【参考方案3】:类方法不会调用您的警报视图
+(void)initialize but by the instance -(id)init method
这就是您的实例没有收到通知的原因
类方法"+(void)initialize"在类首次加载时被调用。
实例方法 "-(id)init" 的名称以 init 开头,并在您创建(实例化)对象时调用。
-(id)init //alert view self = [super init]; return self;
【讨论】:
以上是关于iOS9如何调用NSObject类中的UIAlertviewController?的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中单击 NSObject 内部的 tableView 中的项目时,如何在 NSObject 类中的 UIViewController 上的 UIView 之间正确切换?