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]
или просто удалить ее.
для тех, кто приходит сюда и не нашел решения. Моя проблема заключалась в том, что я создал текстовое поле в 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 {
}