Tôi đang xây dựng hệ thống đăng nhập trong ứng dụng của mình sẽ được gọi nhiều lần. Vì vậy, thay vì sao chép và dán mã vào một số điểm, tôi tất nhiên tạo ra một lớp NSObject để tôi có thể gọi lớp khi cần thiết, thay vào đó.Hiển thị UIAlertView trong NSObject Lớp
Hệ thống đăng nhập sẽ hiển thị UIAlertView và khi "OK" được nhấn, hệ thống sẽ cố gắng đăng nhập. Tôi có thể gọi lớp và UIAlertView sẽ hiển thị, nhưng tôi không thể biết nút nào được nhấn. Đây là mã của tôi:
//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
Còn bây giờ, trước khi tôi đặt UITextFields trong giao diện, tôi chỉ muốn ứng dụng biết nút nào đã được khai thác. Testing
xuất hiện trong nhật ký, nhưng không xuất hiện Here
hoặc Tapped
. Cảm ơn!
Không ghi đè '+ (void) initialize' !!!! '+ initialize' là ** nhiều ** khác với' -init'! Bạn cần phải chắc chắn rằng bạn đang gọi một cách thích hợp 'siêu 'là tốt. Hơn nữa, hãy chắc chắn rằng bạn đang làm theo hướng dẫn MVC. Thường các đối tượng mô hình không được hiển thị các phần tử giao diện người dùng. –
Jack Lawrence nói đúng: ai là người tự đại diện UIAlertView? nó thậm chí không được khởi tạo, đó là cách nó không được gọi là đại biểu. –
Các bạn đã đúng! Tôi đã không làm điều này trước đây, vì vậy tôi đã thay đổi + (void) khởi tạo thành - (id) init và nó hoạt động. Jack Lawrence: viết bình luận của bạn như một câu trả lời để tôi có thể đánh dấu bạn đúng. –