我试图使用textFieldShouldBeginEditing
来禁用键盘显示自定义UITextField
。我正在实施所有UITextFieldDelegate
方法。但是,由于某种原因,textFieldShouldBeginEditing
实际上永远不会被调用。textFieldShouldBeginEditing not called
下面的委托方法总是叫:
– textFieldDidBeginEditing:
– textFieldShouldEndEditing:
– textFieldDidEndEditing:
该视图以下列方式结构:
UIViewController
,其保持滚动视图。根据视图的状态,此滚动视图将包含UIView
以及自定义UITextFields
的列表。
我在这个设备上运行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
如果您的其他委托方法正在针对相同的文本字段进行调用,并且您的文本字段不是子类或任何内容,则只能来自方法名称中的拼写错误。 – jrturton
我已经对UITextField进行了子类化,以对文本字段的外观进行一些修改。但是,我实际上没有触及与代表有关的任何事情。 – Charles
我不确定这个,但是,是否可以通过方法“canBecomeFirstResponder”的默认实现调用“textFieldShouldBeginEditing”?尝试通过[super canBecomeFirstResponder]实现该方法或仅仅删除它。 – lluismontero