Buduję system logowania w mojej aplikacji, który będzie wywoływany kilka razy. Zamiast kopiować i wklejać kod do kilku miejsc, oczywiście tworzę klasę NSObject, aby zamiast tego móc wywołać tę klasę, gdy zajdzie taka potrzeba.Wyświetl UIAlertView w klasie NSObject
System logowania wyświetli UIAlertView, a po naciśnięciu "OK" system podejmie próbę zalogowania. Mogę zadzwonić do klasy i wyświetli się UIAlertView, ale nie wiem, które przyciski są kliknięte. Tu jest mój kodu:
//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
Na razie, zanim kładę UITextFields w widoku, ja po prostu chcę, aby aplikacja wiedziała, który przycisk został naciśnięty. Testing
pojawia się w dzienniku, ale nie pojawia się ani Here
ani Tapped
. Dzięki!
Nie zastępują '+ (void) initialize' !!!! '+ initialize' jest ** dużo ** inny niż' -init'! Musisz się upewnić, że odpowiednio nazywasz 'super'. Ponadto upewnij się, że postępujesz zgodnie ze wskazówkami MVC. Zwykle obiekty modelu nie powinny wyświetlać elementów interfejsu użytkownika. –
Jack Lawrence ma rację: kto jest sobą, że jest delegatem UIAlertView? nawet nie został zainicjowany, dlatego nie jest wywoływany jako delegat. –
Masz rację! Nie robiłem tego wcześniej, więc zmieniłem + (void) initialize na - (id) init i zadziałało. Jack Lawrence: napisz swój komentarz jako odpowiedź, aby dobrze Cię oznaczyć. –