在NSObject类中显示UIAlertView

时间:2012-03-31 16:02:02

标签: iphone objective-c ios ipad nsobject

我正在我的应用程序中构建一个将被多次调用的登录系统。因此,我不是将代码复制并粘贴到几个位置,而是制作一个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

现在,在我将UITextField放入视图之前,我只想让应用知道点击了哪个按钮。 Testing会显示在日志中,但HereTapped都不会显示。谢谢!

4 个答案:

答案 0 :(得分:1)

您的警报视图不应该由类方法+(void)初始化调用,而是由实例 - (id)init方法调用,这就是您的实例无法获取通知的原因。

类首次加载时调用类方法“+(void)initialize”。

实例方法“ - (id)init”的名称以init开头,在您创建(实例化)对象时调用。

-(id)init {

    //alert view

    self = [super init];

    return self;

}

答案 1 :(得分:0)

只是

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

答案 2 :(得分:0)

在类方法中使用self时,您指的是类本身,而不是类的实例。但是,您的委托方法是一个实例方法。您可能希望调用者创建一个Login实例,并让实例创建警报,并将其作为其委托。

答案 3 :(得分:0)

很简单:

在视图控制器类中为您的NSObject类创建一个属性:

在h文件中:

@property(nonatomic,retain)LoginCheckNSObject * LoginCheckerObject;

在m文件中:

self.LoginCheckerObject=[[LoginCheckNSObject alloc] init];
[self.LoginCheckerObject setDelegate:self];
[self.LoginCheckerObject TrackNowLogin];