По някаква причина методът DidBeginEditing: (UITextField *)textfield не работи

Опитвам се да преместя изгледа нагоре, когато клавиатурата се показва, така че да не покрива екрана, но по някаква причина -(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