По какой-то причине метод DidBeginEditing: (UITextField *)текстовое поле не работает

Я пытаюсь переместить вид вверх, когда отображается клавиатура, чтобы она не закрывала экран, но по какой-то причине -(void)DidBeginEditing: (UITextField *)textfield не работает.

- (void)textFieldDidBeginEditing:(UITextField *)ga1
{
    /* should move views */
    self.view.center = CGPointMake(self.view.center.x, self.view.center.y + 220);
}

- (void)textFieldDidEndEditing:(UITextField *)ga1
{
    /* should move views */
    self.view.center = CGPointMake(self.view.center.x, self.view.center.y - 220);

}

это не вхождение в метод, может ли кто-нибудь сказать мне, почему?


person DanielMed    schedule 29.08.2013    source источник
comment
Вы сделали контроллер, в котором этот код является делегатом текстового поля?   -  person rdelmar    schedule 29.08.2013


Ответы (3)


В интерфейсе класса добавьте строку , поэтому в файле .m вы должны указать выше, где написано @implementation...

@interface MyClassName () <UITextFieldDelegate>
 // properties can also go here
 // for example dragging the IBOutlet for the textfield from the storyboard
@end

Затем вы в viewDidLoad должны установить делегата UITextField так...

-(void)viewDidLoad {
 // whatever code
 self.textField.delegate = self;
}

В качестве альтернативы, и более аккуратно, вы можете сделать это в раскадровке, щелкнув текстовое поле и перетащив индикатор на значок класса контроллера представления (значок слева) на нижней панели.

Кроме того, почему вы называете аргумент textField в своей реализации «ga1»? Лучшая практика, которую вы должны называть

 - (void)textFieldDidBeginEditing:(UITextField *)textField

И последнее замечание: если у вас есть несколько текстовых полей, вы должны установить делегата для каждого из них, как описано выше. Вот почему способ раскадровки сделать это «чище», потому что он не позволяет вам иметь несколько объявлений делегатов в вашем коде.

person AdamG    schedule 29.08.2013

Если он реализован, он будет вызываться вместо textFieldDidEndEditing.

@interface MyViewController :UIVieController <UITextFieldDelegate>
@property UITextField *myTextField
@end

@implementation MyViewController{

}

- (void)viewDidLoad {
    [super viewDidLoad];

    self.myTextfield.delegate=self;
}

    -(void)textFieldDidEndEditing:(UITextField *)textField reason:(UITextFieldDidEndEditingReason)reason{
            if(reason==UITextFieldDidEndEditingReasonCommitted)
            {
                NSLog(@"Committed");
            }
    }
person Smart guy    schedule 26.05.2017

Реализуйте <UITextFieldDelegate> протокол для своего класса. И установите делегата на self. Вот документ Apple UITextFieldDelegate Protocol

person Jake Lin    schedule 29.08.2013