2015-10-19 3 views
2

Из-за устаревших предупреждений в iOS9 я столкнулся с трудностями, чтобы показать предупреждение через класс NSObject , потому что в UIAlertView есть один метод для отображения предупреждения [objaler show]; но в iOS 9 для отображения предупреждения мы должны использовать presentViewController, чтобы кто-нибудь мог сказать мне, как показывать контроллер представления в классе nsobject.Как вызвать UIAlertviewController в классе NSObject в iOS9?

код я хочу назвать в классе 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. Как это сделать?

+1

Почему бы не попробовать NSNotification? В своем классе NSObject отправьте уведомление, затем добавьте наблюдателя в класс UIViewController, который вызовет селектор, чтобы показать ваш UIAlertAction. –

+0

@JohnRusselUsi Хорошая идея. –

ответ

0

В этом-то и дело - Apple говорит вам, что вы, вероятно, НЕ ДОЛЖНЫ это делать.

Лучшее, что вы можете сделать в этой ситуации, - это пройти через иерархию контроллеров представления (начиная с UIWindow-rootViewController) и, по крайней мере, представить его на контроллере верхнего уровня.

Лучшее, что вы могли бы сделать в целом, было бы называть такое предупреждение в правильном контроллере представления напрямую.

+0

Я знаю, что мы не можем этого сделать, а также ваш ответ определите, что мы должны пойти с иерархией viewControllers, чтобы ваше решение и мое были одинаковыми, и я определяю код, и вы написали теоретически. – sohil

+0

Здравый смысл в том, что класс NSObject не имеет интерфейса, поэтому вы не можете этого делать. поэтому, пожалуйста, сначала поймите вопрос и ответьте. – sohil

+0

Я понял вопрос. Ответ ниже не является решением, это всего лишь оболочка назначения диспетчера представлений через метод вместо назначения и вызова его напрямую. Сохраняет 2 строки кода, но проблема с поиском правильного контроллера представления для представления все еще остается. – michi

2

Попробуйте это:

Ваш 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]; 
+0

Ну, OP мог просто нажать контроллер вида на предупреждающий контроллер, если он есть. Это не решает проблему. – michi

0

ваше предупреждение vie ж не вызывается метод класса

+(void)initialize but by the instance -(id)init method 

Это является причиной, почему ваш экземпляр не получает уведомления

метод класса «+ (аннулируются) инициализации» вызывается, когда класс первый нагрузки.

метод экземпляра "- (id) init" имеет свое имя, начинающееся с init, и вызывается при создании (создании экземпляра) объекта.

-(id)init { //alert view self = [super init]; return self; } 
+0

спасибо Vijay. Оно работает. –

+0

Yankit Счастливое кодирование – vijay

Смежные вопросы