textFieldShouldBeginEditing不被调用

我正在尝试使用textFieldShouldBeginEditing来禁用显示自定义UITextField的键盘。 我正在实现所有的UITextFieldDelegate方法。 但是,由于某种原因, textFieldShouldBeginEditing实际上永远不会被调用。

下面的委托方法总是被调用:

 – textFieldDidBeginEditing: – textFieldShouldEndEditing: – textFieldDidEndEditing: 

该视图的结构如下:

包含滚动视图的UIViewController 。 根据视图的状态,这个ScrollView将包含一个带有自定义UITextFields列表的UIView

我在这个设备上运行iOS 4.3.5(8L1)。

有任何想法吗?

编辑; 添加了一些代码片段:

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 

textFieldShouldBeginEditing是否由方法canBecomeFirstResponder的默认实现canBecomeFirstResponder

尝试通过[super canBecomeFirstResponder]实现该方法,或者只是删除它。

你有没有把UITextField委托设置为“self”?

对于任何人来到这里,没有find解决办法。 我的问题是,我在IB创build了textField,然后在我的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的问题。 这发生在更新我的应用程序的Storyboard之后。

当UITextFields位于ViewController子类的一部分时,委托方法被调用。

但是,当它们被移动到ViewController中的滚动视图中时,方法不再被调用。

在ViewDidLoad中将自己的应用程序代理设置为self可解决此问题。

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

不知道是否是在这里复制代码的错字错误,但方法名称是不正确的:

正确 – textFieldShouldBeginEditing

YOURS – textFieldShoulBeginEditing(缺less“d”)

在Swift-3中,在textField之前需要“_”的以下方法,这样这个委托方法才会调用。 在我的情况下,它可以帮助我。

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