textFieldShouldBeginEditing не вызывается

я пытаюсь использовать textFieldShouldBeginEditing чтобы отключить клавиатуру от отображения для пользовательского UITextField. Я реализую все UITextFieldDelegate методы. Однако, по какой-то причине,textFieldShouldBeginEditing на самом деле никогда не вызывается.

всегда вызываются следующие методы делегата:

– textFieldDidBeginEditing:
– textFieldShouldEndEditing:
– textFieldDidEndEditing:

представление структурировано следующим образом:

UIViewController который содержит scrollview. В зависимости от состояния представления этот ScrollView будет содержать UIView список обычая UITextFields.

я запускаю iOS 4.3.5 (8L1) на этом устройстве.

какие идеи?

Edit; добавлены некоторые фрагменты кода:

UIViewController имеет следующий интерфейс

@interface AViewController: UIViewController<UITextFieldDelegate>

после загрузки UIViewController я подключаю все UITextFields к представлению с помощью

aSubView.aTextField.delegate = self;

(упрощенные) реализации делегатов, расположенные в AViewController

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
}

- (void)textFieldDidEndEditing:(UITextField *)textField
{
}

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    return YES;
} 

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
    return YES;
}

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    return YES;
}

таможни UITextField код

упрощенный файл реализации --

#import "PVEntryTextField.h"
#import "EntryViewController.h"

@implementation PVEntryTextField
@synthesize isPasswordField, state, singleTap;

- (id)initWithCoder:(NSCoder *)inCoder
{
    if (self = [super initWithCoder:inCoder])
    {
         self.font = [UIFont fontWithName:@"Helvetica-Bold" size:19];
         self.textColor = [UIColor colorWithRed:51.0/255.0 
                                         green:51.0/255.0 
                                          blue:51.0/255.0 
                                         alpha:1.0];
         self.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
    }

    return self;
}

- (CGRect)textRectForBounds:(CGRect)bounds
{
    return CGRectMake(bounds.origin.x + 16, bounds.origin.y,
                      bounds.size.width - 16*2 - 10, bounds.size.height);
}

- (CGRect) editingRectForBounds:(CGRect)bounds
{
    return [self textRectForBounds:bounds];
}

- (BOOL) canBecomeFirstResponder
{
    return YES;
}

- (void) updateState:(int) newState
{
     state = newState;
 }

- (void)dealloc
{
    [super dealloc];
}

 @end

6 ответов


возможно ли, что textFieldShouldBeginEditing вызывается реализацией метода по умолчанию canBecomeFirstResponder?

попробуй реализации метода [super canBecomeFirstResponder] или просто удалить ее.


вы установили делегат UITextField в "self"?


для тех, кто приходит сюда и не нашел решения. Моя проблема заключалась в том, что я создал текстовое поле в IB, а затем выделил его в viewDidLoad. Когда я удалил экземпляр, делегат работал правильно, поскольку он был привязан к правильному TF.

//I REMOVED these two lines because I created the textfield in IB
_nameTextField = [[UITextField alloc] init];
_priceTextField = [[UITextField alloc] init];


[_nameTextField setDelegate:self];
[_priceTextField setDelegate:self];

Я также столкнулся с проблемой отсутствия textFieldShouldEndEditing или textFieldShouldReturn. Это произошло после обновления раскадровки моего приложения.

методы делегата вызывались, когда UITextFields, где часть подкласса ViewController.

но когда они были перемещены в представление прокрутки в ViewController, методы больше не вызывались.

установка их делегатов приложения на self в ViewDidLoad исправлено это проблема.

self.emailField.delegate = self;
self.passwordField.delegate = self;

Не знаю, является ли ошибка опечатки при копировании кода здесь, но имя метода неверно:

правильно-textFieldShouldBeginEditing

ваш-textFieldShoulBeginEditing (отсутствует "d")


в Swift-3 Следующий метод требуется " _ " перед textField, так что этот метод делегата будет вызывать. В моем случае это помогает мне.

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
}