2012-04-19 3 views
0

UITextField을 서브 클래스 화하고 필드의 텍스트가 변경 될 때마다 일부 코드를 실행하는 방법이 필요합니다. 어떻게해야합니까?서브 스크립 션 된 UITextField의 setText : (NSString *) 텍스트 메소드

(이 클래스 내부의 논리를 작성하면 코드 외부에 더 깔끔한 코드를 작성할 수 있습니다. 즉, UITextFieldDelegate을 사용하여 요청한 작업을 수행 할 수 있지만 클래스 외부에서만 액세스 할 수 있습니다.)

답변

-1

이 아닌 코드는 어떻게 UITextFieldDelegate 메서드를 사용하여이 아닌가요? MVC 디자인 패러다임을 깨뜨리는 것은 뷰 클래스 (UITextField)에게 컨트롤러가 의도 한 변경 사항에 응답하는 방법을 알려주는 것입니다. 델리게이트 구현에서 처리하는 것과는 대조적으로 setText를 재정의하는 것이 더 깔끔하다고 생각하는 이유에 대해 좀 더 자세히 설명해 주시겠습니까? 당신의 ViewController의 .H 파일에서

+0

UITextField는 뷰 클래스입니다. NSString은 여기 모델 클래스입니다. –

+0

물론입니다. 업데이트 됨. – jmstone617

+1

사용자 지정 지우기 단추를 만들려면이 코드가 필요합니다. 따라서 텍스트가 없으면 단추가 사라지고 코드는 필드의 텍스트를 지울 수 있습니다. – Francesco

0

단지 텍스트 필드의 텍스트가이 방법을 변경하는 경우이 대리자 메서드는

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ 

       .....Do Somthing Here.... 

} 

입니다 ..이 deledate하는 .m 파일을 사용 울부 짖는 코드에서 그 후

@interface yourviewcontroller <UITextFieldDelegate> 

을 정의 매번 호출되는 .

1

맞춤형 지우기 버튼이 필요한 동일한 사용 사례가 나타났습니다. 나는 setText를 재정의 (override) 할 수 있기를 희망하면서 서브 클래스 UITextField를 시도해 보았습니다. 그러나 그것은 내가 원하는대로 문자가 입력되거나 삭제 될 때마다 호출되지 않기 때문에 막 다른 길로 판명되었습니다. 나는 다음과 같은 해결책을했다 :

- (void)awakeFromNib { 
    [super awakeFromNib]; 
    self.clearButtonMode = UITextFieldViewModeNever; 
    UIButton *clearButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 20, 20)]; 
    [clearButton setTitle:@"x" forState:UIControlStateNormal]; 
    [clearButton addTarget:self action:@selector(clearText:) forControlEvents:UIControlEventTouchDown]; 
    self.rightView = clearButton; 
    [self addTarget:self action:@selector(textChanged:) forControlEvents:UIControlEventEditingChanged]; 
} 

- (void)textChanged:(UITextField *)sender { 
    self.rightViewMode = sender.text.length > 0 ? UITextFieldViewModeWhileEditing : UITextFieldViewModeNever; 
} 

- (void)clearText:(UIButton *)sender { 
    self.text = @""; 
    [self textChanged:self]; 
} 

우리가 키보드에 의해 초래 텍스트의 변화에 ​​반응하지만 코드의 텍스트를 설정 할 수 있습니다 UIControlEventEditingChanged 사용. clearText : 메소드로 가져온 텍스트에 응답하기를 원하기 때문에 나는 clearChanged 메서드를 수동으로 호출해야합니다. 텍스트가 다른 곳의 코드에서 설정된 경우이를 보완하기 위해 textChanged를 호출해야합니다.

관련 문제