Отображение UIAlertView в классе NSObject - PullRequest
5 голосов
/ 31 марта 2012

Я создаю систему входа в систему в моем приложении, которая будет вызываться несколько раз. Поэтому вместо того, чтобы копировать и вставлять код в несколько мест, я, конечно, создаю класс NSObject, чтобы вместо этого я мог вызывать этот класс.

Система входа в систему отобразит UIAlertView, и когда нажмете «OK», система попытается войти в систему. Я могу вызвать класс, и отобразится UIAlertView, но я не могу сказать, какие кнопки были нажаты. Вот мой код:

//Calling the login system

Login *login = [[Login alloc] init];

Login.h

#import <Foundation/Foundation.h>

@interface Login : NSObject <UIAlertViewDelegate> {

}

@end

Login.m

#import "Login.h"

@implementation Login

+(void)initialize {

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Login" message:nil delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];

    [alert show];
    [alert release];

    NSLog(@"Testing");

}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex  {

    NSLog(@"Here");

    NSString *title = [alertView buttonTitleAtIndex:buttonIndex];  

    if([title isEqualToString:@"OK"]) {

        NSLog(@"Tapped");

    }

}

@end

Пока что, прежде чем поместить UITextFields в представление, я просто хочу, чтобы приложение узнало, какая кнопка была нажата. Testing появляется в журнале, но ни Here, ни Tapped не появляются. Спасибо!

Ответы [ 4 ]

1 голос
/ 31 марта 2012

Ваше представление предупреждений не должно вызываться методом класса + (void) initialize, а методом экземпляра - (id) init, поэтому ваш экземпляр не получает уведомлений.

метод класса "+ (void) initialize" вызывается при первой загрузке класса.

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

-(id)init {

    //alert view

    self = [super init];

    return self;

}
0 голосов
/ 29 октября 2014

Все просто:

Создайте свойство для вашего класса NSObject в классе контроллера представления:

в файле h:

@ свойство (неатомное, сохраняемое) LoginCheckNSObject *LoginCheckerObject;

в файле m:

self.LoginCheckerObject=[[LoginCheckNSObject alloc] init];
[self.LoginCheckerObject setDelegate:self];
[self.LoginCheckerObject TrackNowLogin];
0 голосов
/ 31 марта 2012

Когда вы используете self в методе класса, вы ссылаетесь на сам класс, а не на экземпляр класса. Однако ваш метод делегата является методом экземпляра. Возможно, вы хотите, чтобы вызывающая сторона создала экземпляр Login и чтобы экземпляр создавал предупреждение, а также был его делегатом.

0 голосов
/ 31 марта 2012

Просто

switch(buttonIndex){
    case 0:
        NSLog(@"Tapped First Button");
        break;
    case 1:
        break;
    default:
        break;
}
...