TextField 자체의 입력을 처리하는 UITextField의 하위 클래스 UIUnitTextField가 있습니다 (범위 확인의 값, isNumeric 및 기타 사항) 이를 위해 하위 클래스를 UITextField [self setDelegate:self]
의 대리자로 설정 했으므로 서브 클래스의 (void)textFieldDidEndEditing:(UIUnitTextField *)textField
메서드에서 입력을 확인할 수 있습니다.Ios : 수퍼 클래스의 대리인으로 하위 클래스 설정 -> 다른 클래스에 대해 차단 된 수퍼 클래스 대리자
이 모든 것이 훌륭하게 작동합니다. UITextField의 대리자가 이미 설정되었습니다. TextField가 숨어있는 키보드에 대한 솔루션을 구현하고자 할 때 컨트롤러보기에서 (void)textFieldDidEndEditing:(UIUnitTextField *)textField
을 다시 사용해야합니다. 이것은 물론 불가능합니다.
하위 클래스 UIUnitTextField에 대한 UITextField 클래스의 대리자를 사용하여이 작업을 수행하지 못했지만이 같은 입력을 처리하는 다른 방법은 생각할 수 없습니다. 이미이 문제가 발생 했습니까? 이 갈등을 해결할 수있는 방법은 무엇일까요?
나는 좋은 의견이나 마음으로 푸시에 감사드립니다.
난 그냥 앞으로 subDelegate에 대한 호출을이 같은 서브 클래스의 setDelegate
방법을 덮어하고, 경우 새로운 생각 그것은, 괜찮을까요했다 update-?
//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];
}
개체를 자체 대리인으로 만드는 것이 일반적으로 잘 수행되지 않는다. 대개 대리인 메시지를 보내는 기계에 연결하는 것이 가장 좋습니다. 이 경우 'UITextFieldDidEndEditingNotification'일 수 있습니다. – rickster
@rickster 그건 정확히 내가 뭘 찾고있어 :) 감사합니다. 예제 코드를 사용하여 답변을 게시합니다. –