iphone SDK: Не уверен, почему я не получаю события UITextField? - PullRequest
1 голос
/ 24 октября 2009

Я определил контроллер для получения событий.

@interface salesViewController : UIViewController
    <UITextFieldDelegate>{

Однако ни одно из моих событий не стреляет.

 - (void)textFieldDidBeginEditing:(UITextField *)textField
  {
 //this is not getting called
  }

В Интерфейсном Разработчике я назначил делегат TextField для salesView.

Чего мне не хватает?

Ответы [ 2 ]

5 голосов
/ 24 октября 2009

Вы должны правильно установить делегата. Вы соблюдаете протокол, но вам нужно сделать это:

@interface YourController : UIViewController<UITextFieldDelegate>   {
    IBOutlet UITextField* field;
}
@end


@implementation YourController
-(void)viewDidLoad
{
    [field setDelegate:self];
}

И вы получите события. В качестве альтернативы вы также можете установить делегат в Интерфейсном Разработчике, а также сделать это программно в loadView, выделить поле и задать делегата.

Кроме того, старайтесь использовать NSNotificationCenter как можно меньше. Уведомления несколько устарели, если между вами и объектом не существует прямого пути. Просто небольшой комментарий к ответу выше.

2 голосов
/ 24 октября 2009

что вы пытаетесь достичь? textFieldDidBeginEditing передается каждый раз, когда пользователь выбирает текстовое поле. Если вы пытаетесь обновить метку или что-то еще, когда пользователь вносит изменения, вам нужно настроить наблюдателя с NSNotificationCenter и следить за уведомлением, которое выдается всякий раз, когда это происходит. наблюдатель, как только вы закончите с этим

например:

#pragma mark
#pragma mark -
#pragma mark Notification Observers

- (void)addObservers {
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldDidChange:) name:@"UITextFieldTextDidChangeNotification" object:nil];    
}
- (void)removeObservers {
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"UITextFieldTextDidChangeNotification" object:nil];
}

если вам нужно следить за несколькими текстовыми полями, сделайте что-то вроде этого для вашего селектора:

- (void)textFieldDidChange:(NSNotification*)aNotification {
    UITextField *textField = (UITextField *)[aNotification object];
    if([textField isEqual:usernameTextField])
    {           
        [user setUsername:usernameTextField.text];

    }
    else if([textField isEqual:phoneNumberTextField])
    {
        [user setPhoneNumber:phoneNumberTextField.text];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...