2012-09-19 2 views
2

textField1, textField2, textField3, textField4, textField5 등 다섯 개의 textField가 있습니다.UITextField 키보드 반환 단추가 완료 단추로 변경되어야합니다.

내가 원하는 것은 UITextField 모든 textField에 텍스트가 포함되어있을 때 키보드 복귀 버튼이 완료 버튼으로 변경되어야한다는 것입니다. 내가 시도 이

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    if([textField1.text doubleValue]!=0) 
     if([textField2.text doubleValue]!=0) 
      if([textField3 doubleValue]!=0) 
       if([textField4 doubleValue]!=0) 
        if([textField5 doubleValue]!=0) 
        { 
         [textField setReturnKeyType:UIReturnKeyDone]; 
        } 
        else 
         [textField setReturnKeyType:UIReturnKeyDefault]; 
        else 
         [textField setReturnKeyType:UIReturnKeyDefault]; 
        else 
         [textField setReturnKeyType:UIReturnKeyDefault]; 
        else 
         [textField setReturnKeyType:UIReturnKeyDefault]; 
        else 
         [textField setReturnKeyType:UIReturnKeyDefault]; 
} 

나는 또한

+0

동일한 텍스트 필드를 여러 번 확인하는 이유는 무엇입니까? – Neo

+0

@ 네오 죄송합니다, 실수로 내가 그처럼 입력했습니다 ... 이제 질문이 수정되었습니다 ... – Venkat

+0

안녕 친구 .... 작은 의심 –

답변

5

당신이 더 textFieldShouldBeginEditing 놀 ... 사람이 제발 도와주세요 ...

모두 작동하지 않습니다
- (void)textFieldDidEndEditing:(UITextField *)textField 
{ 
} 

에 노력, 여기에 단지 확인 모든 텍스트 필드에 null이 아닌 값이 포함되어 있습니다.

코드는 다음과 같이 표시되어야합니다.

,
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { 
    if([[tf1.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length] > 0 && [[tf2.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length] > 0 [[tf3.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length] > 0) { 
     [textField setReturnKeyType:UIReturnKeyDone]; 
    } 
    return TRUE; 
} 

//// 이 코드를 확인했습니다

편집 할 수 있습니다. 그것은 잘 작동합니다. 그래서 이것을 시도해보세요.

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { 
    if ([self areAllFieldsNonEmpty]) { 
     [textField setReturnKeyType:UIReturnKeyDone]; 
     [textField reloadInputViews]; 
    } else { 
     [textField setReturnKeyType:UIReturnKeyDefault]; 
     [textField reloadInputViews]; 
    } 
    return TRUE; 
} 

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    if ([self areOtherFiledsNonEmptyThan:textField]) { 
     if (range.location == 0 && range.length == 0) { 
      [textField setReturnKeyType:UIReturnKeyDone]; 
      [textField reloadInputViews]; 
     } else if (range.location == 0 && range.length == 1) { 
      [textField setReturnKeyType:UIReturnKeyDefault]; 
      [textField reloadInputViews]; 
     } 
    } 
    return TRUE; 
} 

- (NSInteger)lengthOf:(UITextField *)tf { 
    return [[tf.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length]; 
} 

- (BOOL)areOtherFiledsNonEmptyThan:(UITextField *)tf { 
    BOOL isEmpty = TRUE; 
    for (UITextField *textField in self.view.subviews) { 
     if ([textField isKindOfClass:[UITextField class]] && tf != textField) { 
      if ([self lengthOf:textField] == 0) { 
       isEmpty = FALSE; 
       break; 
      } 
     } 
    } 
    return isEmpty; 
} 

- (BOOL)areAllFieldsNonEmpty { 
    BOOL isEmpty = TRUE; 
    for (UITextField *textField in self.view.subviews) { 
     if ([textField isKindOfClass:[UITextField class]]) { 
      if ([self lengthOf:textField] == 0) { 
       isEmpty = FALSE; 
       break; 
      } 
     } 
    } 
    return isEmpty; 
} 
+0

같은 문제는'[__NSCFConstantString 개수] : 인스턴스에 전송 된 인식 할 수없는 선택기 0xb9ba7c' – Venkat

+0

확인 내 대답이 업데이트되었습니다. 길이가 대신 계산되어야합니다. :) –

+0

아니요 제대로 작동하지 않습니다 ... – Venkat

1

노력이

if([your_textField.text length]>0) 

your_textField.returnKeyType = UIReturnKeyDone; 
+0

모든 키보드 프레스에서 작동합니다. 키보드에서 "검색"을 누르면 작동합니다. – nesimtunc

0
당신은 두 가지 방법으로 당신의 상태를 확인해야합니다

:

-(void)textFieldDidBeginEditing:(UITextField *)textField; 
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string; 

그래서 코드의 재사용을위한 조건에 대한 기능을 -

-(void)checkCondition;  

그런 다음 012에서 수행하십시오. 32,클래스 -

-(void)checkCondition 
{ 
    if([txtField1.text length]>0 && [txtField2.text length]>0 && [txtField3.text length]>0 && [txtField4.text length]>0 && [txtField5.text length]>0) 
    { 
     txtField1.returnKeyType = UIReturnKeyDone; 
     txtField2.returnKeyType = UIReturnKeyDone; 
     txtField3.returnKeyType = UIReturnKeyDone; 
     txtField4.returnKeyType = UIReturnKeyDone; 
     txtField5.returnKeyType = UIReturnKeyDone; 
    } 

    else 
    { 
     txtField1.returnKeyType = UIReturnKeyDefault; 
     txtField2.returnKeyType = UIReturnKeyDefault; 
     txtField3.returnKeyType = UIReturnKeyDefault; 
     txtField4.returnKeyType = UIReturnKeyDefault; 
     txtField5.returnKeyType = UIReturnKeyDefault; 
    } 

} 

-(void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
    [self checkCondition]; 
    [textField reloadInputViews]; 
} 

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string; 
{ 
    [self checkCondition]; 
    [textField reloadInputViews]; 
} 

space 기억은 character로 계산이다, 그래서 당신이 먼저 spaces을 계산 textField.text에서 그들을 제거하고 비교하려는 해달라고합니다.