2010-07-20 7 views
2

보기에 3 개의 UITextFileds가 있고 그 중 2 개에서만 UITextFieldDelegate 메서드의 논리를 적용하려고합니다. 호출을 트리거 한 UITextField를 어떻게 결정합니까?UITextField의 인스턴스를 비교하는 방법

미리 감사드립니다. 당신이 위임 방법을 사용하는 경우

답변

7

일반적으로, 간단한 포인터 비교 작동, 당신은 단지 객체의 신원을 확인하고자하기 때문이다.

-(BOOL)textFieldShouldReturn:(UITextField*)textField { 
    if (textField != theIgnoredTextField) { 
     ... 

또는 .tag을 텍스트 필드에 할당 할 수 있습니다.

-(BOOL)textFieldShouldReturn:(UITextField*)textField { 
    if (textField.tag != 37) { 
     ... 

장점은 theIgnoredTextField에 대한 참조를 저장하는 데 필요하지 않습니다, 그리고 태그는 인터페이스 빌더에서 설정 될 수 있지만, 그것은 인식 매직 넘버 "37"에 의존한다.

+0

... 또는 컴파일 된 열거 형 상수'KTMIgnoredTextFieldTag '. 테이블 뷰 셀 구성에서 많이 사용합니다. –

+0

@Graham :보기가 코드로만 구성되어 있으면 좋지만 IB의 AFAIK에서는 "KTMIgnoredTextFieldTag"와 같은 정수가 아닌 정수를 입력 할 수 없습니다. – kennytm

+0

아니요. 그러나 텍스트 필드를 2로 사용해야하는 모든 곳에서 마법 숫자가 많이 줄어 듭니다. –

2

같은 - (void)textFieldDidEndEditing:(UITextField *)textField 당신이해야 할 모든 당신이 당신의 클래스 인스턴스 변수에 그들에 대한 참조를 유지하는 경우 당신은 포인터를 비교하거나 사용할 수

- (void)textFieldDidEndEditing:(UITextField *)textField 
{ 
if (textField == myFirstTextField) 
{ 
//blah 
} 
else if (textField == mySecondTextField) 
{ 
//etc etc. 
} 
else 
{ 
//WHEE! 
} 
}//method end 
1

같은 일을 할 것입니다 UIView의 태그 속성, 더 좋아하는 것.

4

대리자 메서드에는 textfield 개체를 가리키는 텍스트 매개 변수가 있습니다. 이 매개 변수를 텍스트 필드 개체와 비교하여 어떤 개체인지 확인할 수 있습니다. 대리자 방법에

UITextField *field1, *field2, *field3; 

당신이 매개 변수를 비교할 수 있습니다

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    if (textField == field1) { 
     // do something special for field 1 
    } ...