textFieldShouldBeginEditing未被调用

Cha*_*les 9 iphone mobile objective-c ios

我试图用来textFieldShouldBeginEditing禁用键盘显示自定义UITextField.我正在实施所有UITextFieldDelegate方法.但是,出于某种原因,textFieldShouldBeginEditing实际上永远不会被调用.

始终调用以下委托方法:

– textFieldDidBeginEditing:
– textFieldShouldEndEditing:
– textFieldDidEndEditing:
Run Code Online (Sandbox Code Playgroud)

视图的结构如下:

UIViewController它拥有一个滚动视图.根据视图的状态,此ScrollView将包含一个UIView自定义列表UITextFields.

我在这台设备上运行iOS 4.3.5(8L1).

有任何想法吗?

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

UIViewController 有以下界面

@interface AViewController: UIViewController<UITextFieldDelegate>
Run Code Online (Sandbox Code Playgroud)

加载UIViewController后,我使用将所有UITextField连接到视图

aSubView.aTextField.delegate = self;
Run Code Online (Sandbox Code Playgroud)

位于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;
}
Run Code Online (Sandbox Code Playgroud)

自定义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
Run Code Online (Sandbox Code Playgroud)

llu*_*ero 15

是否可以textFieldShouldBeginEditing通过方法的默认实现调用canBecomeFirstResponder

尝试通过[super canBecomeFirstResponder]或仅删除它来实现该方法.


llu*_*ero 13

您是否将UITextField委托设置为"self"?