Почему setDelegate не работает для UITextFieldDelegate, но работает через Interface Builder - PullRequest
2 голосов
/ 08 июля 2011

У меня есть следующий код ниже, и я не могу понять, почему метод textFieldShouldReturn не вызывается. Когда я использую IB для создания соединения с делегатом, это работает, но когда это делается программно, оператор журнала не отображается. Что я тут не так делаю?

Во-вторых, в textFieldShouldReturn некоторые примеры возвращают YES, а некоторые возвращают NO. В документации ios указано, что возврат YES обеспечит реализацию по умолчанию. Может кто-нибудь объяснить это поподробнее?

// .h file

@interface GoSocietyLoginController : UIViewController <UITextFieldDelegate> {    
}
- (IBAction)textFieldDoneEditing:(id)sender;
- (BOOL)textFieldShouldReturn:(UITextField *)textField;

@end

// .m file

@interface GoSocietyLoginController ()

@property (nonatomic,retain) IBOutlet UITextField   *login;
@property (nonatomic,retain) IBOutlet UITextField   *password;

@end


@implementation GoSocietyLoginController

@synthesize login;
@synthesize password;

    - (void)viewDidLoad
    {    
        [super viewDidLoad];
        [login setDelegate:self];
        [password setDelegate:self];
    }

    - (BOOL)textFieldShouldReturn:(UITextField *)textField {
        NSLog(@"Hello World");

        if ([textField isEqual:login]) {
            [password becomeFirstResponder];
        }

        return NO;
    }

1 Ответ

0 голосов
/ 08 июля 2011

Из кода, который вы разместили, мне не кажется, что вы объявили розетки в заголовке:

IBOutlet UITextField *login;
IBOutlet UITextField *password;

Обязательно объявите их и настройте соединения в IB.

...