textFieldShouldBeginEditing не вызывается - PullRequest
8 голосов
/ 12 октября 2011

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

ВСЕГДА вызываются следующие методы-делегаты:

– textFieldDidBeginEditing:
– textFieldShouldEndEditing:
– textFieldDidEndEditing:

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

UIViewController, который содержит вид прокрутки. В зависимости от состояния представления этот 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 ]

15 голосов
/ 13 октября 2011

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

Попробуйте реализовать метод с помощью [super canBecomeFirstResponder] или просто удалить его.

13 голосов
/ 12 октября 2011

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

2 голосов
/ 15 июня 2015

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

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

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

Устранение этой проблемы с помощью делегатов приложения для себя в ViewDidLoad.

self.emailField.delegate = self;
self.passwordField.delegate = self;
2 голосов
/ 14 февраля 2015

Для тех, кто приходит сюда и не нашел решения.Моя проблема заключалась в том, что я создал textField в 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];
0 голосов
/ 15 февраля 2017

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

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
}
0 голосов
/ 12 октября 2011

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

ПРАВИЛЬНО - textFieldShouldBeginEditing

YOURS - textFieldShoulBeginEditing (отсутствует «d»)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...