我試圖使用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