我正在尝试创建一个自包含的自定义UITextField
类,其主要职责是将文本转换为Tokens
,方法NSTokenField
在Mac OS X上的工作方式相同。这样,如果有人需要像textfield这样的标记,它们只是实例化uitextfield的一个实例,并让它成为我的类的子类。
我的问题是委托控制。
目标是我正在尝试接收用户与自定义文本字段交互时的文本字段委托方法。如果不将代表传递给其他任何人,我怎么能这样做。
或者我必须观察通知吗?
这是我迄今为止尝试创建一个自包含类的方法:
//PKTokenTextField.h
@interface PKTokenTextField : UITextField<UITextFieldDelegate>
//PkTokenTextField.m
在.m
文件中我有:
#import "PKTokenTextField.h"
@implementation PKTokenTextField
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
[self commonSetup];
}
return self;
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
// Drawing code
}
*/
-(void)commonSetup{
self.delegate = self;
}
- (void)textFieldDidBeginEditing:(UITextField *)textField{
NSLog(@"description field did become responder");
}
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
NSLog(@"LOL OF COURSE");
return YES;
}
@end
答案 0 :(得分:1)
如果您愿意,可以执行此操作。只要一个类符合UITextFieldDelegate
协议,就可以将其设置为文本字段的委托,即使它是文本字段本身。
然而,这违背了委托的目的,即允许一个对象与另一个对象的变化进行协调,改变和反应,同时最小化两者之间的耦合。
如果您可以通过子类化,合成或修改文本字段的属性来实现您正在寻找的效果,那么您应该这样做。 (请注意,问题中的示例NSTokenField
不需要覆盖委托。)
另请参阅:TITokenField
。