Ios:将子类设置为超类的委托 - >为其他类阻止的超类委托

时间:2014-11-16 13:44:49

标签: objective-c delegates subclass

我有一个UITextField的子类UIUnitTextField,它处理TextField本身的输入(范围检查中的值,isNumeric和其他一些东西) 为此,我确实将子类设置为UITextField [self setDelegate:self]的委托,因此可以在我的子类中的(void)textFieldDidEndEditing:(UIUnitTextField *)textField方法中验证输入。

这一切都很精彩,一举一动。现在已经设置了UITextField的委托。由于我想针对隐藏TextField的键盘实现解决方案,我需要在控制器视图中再次使用(void)textFieldDidEndEditing:(UIUnitTextField *)textField。这当然是不可能的。

这引出了我的想法,我并不好,使用UITextField类的委托为子类UIUnitTextField,但我不能考虑另一种方式来处理这样的输入。 有人有过这个问题吗?什么可以解决这种冲突?

我感谢任何良好的投入或精神推动。

更新 - 我有了新的想法 如果我像这样覆盖子类中的setDelegate方法,并将调用转发给subDelegate,那会没关系吗?

//set own delegate
-(void)didMoveToSuperview{
   super.delegate = self;

//set numeric keayboard type with a custome "done" button
[self setKeyboardType:UIKeyboardTypeDecimalPad];
NumberPadDoneBtn* nmbPad=[[NumberPadDoneBtn alloc]initWithFrame:CGRectMake(0,0,1,1)];
[self setInputAccessoryView:nmbPad];

}
-(void)setDelegate:(id<UIUnitTextFieldDelegate>)delegate{
    [self setSubDelegate:delegate];
}

//before editing, remove unit string from text
-(void)textFieldDidBeginEditing:(UIUnitTextField *)textField{
    super.text = [self removeUnit:super.text];
    [self.subDelegate textFieldDidBeginEditing:(UIUnitTextField *)textField];
}

1 个答案:

答案 0 :(得分:1)

Rickster给了我使用UITextFieldTextDidEndEditingNotification的提示。这正是我一直在寻找的。实施非常简单

-(void)didMoveToSuperview{
[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(textFieldDidEndEditingNotification)
                                                 name:UITextFieldTextDidEndEditingNotification
                                               object:self];
}
-(void)textFieldDidEndEditingNotification{
//do stuff
}