我正在我的应用程序中构建一个将被多次调用的登录系统。因此,我不是将代码复制并粘贴到几个位置,而是制作一个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
会显示在日志中,但Here
和Tapped
都不会显示。谢谢!
答案 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];