textFieldShouldBeginEditing未被调用

时间:2011-10-12 16:55:59

标签: iphone objective-c ios mobile

我正在尝试使用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

6 个答案:

答案 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 {
}