2014-11-16 2 views
0

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]; 
} 
+1

개체를 자체 대리인으로 만드는 것이 일반적으로 잘 수행되지 않는다. 대개 대리인 메시지를 보내는 기계에 연결하는 것이 가장 좋습니다. 이 경우 'UITextFieldDidEndEditingNotification'일 수 있습니다. – rickster

+0

@rickster 그건 정확히 내가 뭘 찾고있어 :) 감사합니다. 예제 코드를 사용하여 답변을 게시합니다. –

답변

1

릭스터는 팁을 UITextFieldTextDidEndEditingNotification에게주었습니다. 이것은 정확히 제가 찾은 것입니다. 구현이 놀랍도록 쉬웠다.

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