在NSObject类中显示UIAlertView类

在NSObject类中显示UIAlertView类

问题描述:

我在我的应用程序中构建了一个登录系统,该系统将被多次调用。因此,我不是将代码复制粘贴到多个位置,而是制作NSObject类,以便在需要时调用该类,而不是。在NSObject类中显示UIAlertView类

登录系统将显示一个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出现在日志中,但不会出现HereTapped。谢谢!

+2

不要覆盖'+(无效)initialize' !!!! '+ initialize'与'-init'有很大不同**!你需要确保你正确地调用'super'。此外,请确保您遵循MVC指南。通常,模型对象不应显示UI元素。 – 2012-03-31 16:06:02

+0

杰克劳伦斯是正确的:谁是自我,它是一个UIAlertView代表?它甚至没有被初始化,这就是它不作为委托被调用的方式。 – 2012-03-31 16:08:59

+1

你们是对的!我之前没有这样做过,因此我将+(void)初始化为 - (id)init并将其工作。杰克劳伦斯:写你的评论作为答案,所以我可以标记你的权利。 – 2012-03-31 16:10:07

您的警报视图不应该被类方法+(void)初始化,而是通过实例 - (id)init方法调用,这就是为什么你的实例没有得到通知。

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

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

-(id)init { 

    //alert view 

    self = [super init]; 

    return self; 

} 
+0

感谢您的帮助。对于阅读此答案的人:将+(void)初始化为 - (id)init。 – 2012-03-31 17:13:27

+0

根据@JackLawrence评论 – moxy 2012-03-31 17:36:30

只是

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

当你在你指的是类本身,而不是类的实例类方法使用self。但是,您的委托方法是一种实例方法。您可能希望调用者创建一个Login实例并让该实例创建警报,再加上它的委托。

很简单:

在.h文件

在您的视图控制器类为您的NSObject类的属性

@属性(非原子,保留)LoginCheckNSObject * LoginCheckerObject;

在M档:

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

@ Jack Humphries改进,将其添加到您的视图控制器类中。而已 – SathishKumarEro 2014-10-29 15:12:47