我有一个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];
}
答案 0 :(得分:1)
Rickster给了我使用UITextFieldTextDidEndEditingNotification
的提示。这正是我一直在寻找的。实施非常简单
-(void)didMoveToSuperview{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(textFieldDidEndEditingNotification)
name:UITextFieldTextDidEndEditingNotification
object:self];
}
-(void)textFieldDidEndEditingNotification{
//do stuff
}