我正在尝试使用textFieldShouldBeginEditing
禁止键盘显示自定义UITextField
。我正在实现所有UITextFieldDelegate
方法。但是,出于某种原因,textFieldShouldBeginEditing
实际上从未被调用过。
以下委托方法总是被调用:
– textFieldDidBeginEditing:
– textFieldShouldEndEditing:
– textFieldDidEndEditing:
视图的结构如下:
UIViewController
,其中包含滚动视图。根据视图的状态,此ScrollView将包含UIView
,其中包含自定义UITextFields
的列表。
我正在此设备上运行iOS 4.3.5(8L1)。
有什么想法吗?
编辑;添加了一些代码片段:
UIViewController
具有以下界面
@interface AViewController: UIViewController<UITextFieldDelegate>
加载UIViewController后,我使用
将所有UITextField连接到视图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
答案 0 :(得分:15)
方法textFieldShouldBeginEditing
的默认实现是否可能调用canBecomeFirstResponder
?
尝试按[super canBecomeFirstResponder]
实施该方法,或者只删除它。
答案 1 :(得分:13)
您是否已将UITextField委托设置为“self”?
答案 2 :(得分:2)
对于任何来到这里并且没有找到解决方案的人。我的问题是我在IB中创建了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];
答案 3 :(得分:2)
我还遇到了没有调用textFieldShouldEndEditing或textFieldShouldReturn的问题。这是在更新我的应用程序的故事板后发生的。
当UITextFields是ViewController子类的一部分时,委托方法被调用。
但是,当它们被移动到ViewController中的Scroll View中时,不再调用这些方法。
在ViewDidLoad中将他们的app委托设置为self修复了此问题。
self.emailField.delegate = self;
self.passwordField.delegate = self;
答案 4 :(得分:0)
不知道在这里复制代码是否是拼写错误,但方法名称不正确:
CORRECT - textFieldShouldBeginEditing
你的 - textFieldShoulBeginEditing(缺少“d”)
答案 5 :(得分:0)
在Swift-3中需要以下方法&#34; _&#34;在textField之前,这个委托方法将调用。在我的情况下,它有助于我。
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
}