是否可以设置UITextField删除并将其委托设置为自身?

时间:2014-08-23 20:57:09

标签: ios objective-c iphone ios7 uitextfield

我正在尝试创建一个自包含的自定义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

1 个答案:

答案 0 :(得分:1)

如果您愿意,可以执行此操作。只要一个类符合UITextFieldDelegate协议,就可以将其设置为文本字段的委托,即使它是文本字段本身。

然而,这违背了委托的目的,即允许一个对象与另一个对象的变化进行协调,改变和反应,同时最小化两者之间的耦合。

如果您可以通过子类化,合成或修改文本字段的属性来实现您正在寻找的效果,那么您应该这样做。 (请注意,问题中的示例NSTokenField不需要覆盖委托。)

另请参阅:TITokenField