2011-09-16 2 views
0

텍스트 필드가 하나 있습니다.Objective C에서 함수 재귀를 중지하려면 어떻게해야합니까?

아래의 기능은 txt 필드의 IB에서 "편집 변경됨"UI 이벤트에 첨부됩니다. 나는 텍스트 필드를 변경하고 명백한로 다시

를 호출하고 다시 어떤 일이, 내가 한 번 호출 한 후 기능을 중지 할 수 있도록

기능은 재귀 적이다.

그래서, 나는

-(IBAction) testEvents:(id) sender 
{ 

    txtEditAmount.text=[txtEditAmount.text substringToIndex:([txtEditAmount.text length]-1)]; 




} 

답변

2

오히려 해당 이벤트 콜백을 사용하는 것보다, 지금처럼 UITextFieldDelegate 방법 textFieldDidEndEditing:을 구현하려고 :

- (void)textFieldDidEndEditing:(UITextField *)textField 
{ 
    textField.text = [textField.text substringToIndex: 
         [txtEditAmount.text length] - 1]; 
} 

는 그래서 마지막 문자를 경우에만 차단됩니다 사용자가 필드 편집을 중지합니다. 네가하려는 일에 따라 달라질거야. 당신은 그들이, 예를 들어, 여전히 비어 유지하지만 암호 필드는 문자 사용자 유형을 캡처 입력 어떤 백 스페이스하려는 경우, 대신에이 같은 프로토콜 방법 textField:shouldChangeCharactersInRange:replacementString:을 구현 :

- (BOOL)textField:(UITextField *)textField 
    shouldChangeCharactersInRange:(NSRange)range 
    replacementString:(NSString *)string 
{ 
    [enteredString appendString:string]; // store the character the user typed 
    return NO; // leave the field blank 
} 
+0

그것은이 방법을 사용하는 절대적으로 좋은 방법이며, 정말 고마워 내 작품을 단순화 ... –

1

당신은 정적 부울을 사용할 수 있습니다 ..이 반복 기능을 중지합니다.

-(IBAction) testEvents:(id) sender 
{ 
    static BOOL programmaticallyChanged=NO; 
    if(programmaticallyChanged) { 
     return; 
    } 
    programmaticallyChanged=YES; 
    txtEditAmount.text=[txtEditAmount.text substringToIndex:([txtEditAmount.text length]-1)]; 
    programmaticallyChanged=NO; 
} 
+0

''programmEventChanged = YES;와'programmaticallyChanged = NO; '사이에'testEvents :'가 호출됩니까? – Nekto

+0

@Nekto : 그게 질문이 의미하는 바입니다. – icktoofay

+0

물론, 나는 그 사이에'testEvents :'가 호출 될지 확신하지 못했습니다. 그렇다면 훌륭한 해결책이 될 것입니다. – Nekto

2

내 변형

-(IBAction) testEvents:(id) sender 
{ 
    static BOOL flag = NO; 
    if (flag) {flag=NO; return;} 
    flag = YES; 
    txtEditAmount.text=[txtEditAmount.text substringToIndex:([txtEditAmount.text length]-1)]; 
} 
+0

나는 그것을 시험해 보았습니다. 그것은 훌륭하게 작동하지만, 나는 좋은 것을 발견했습니다. 내 요구 사항, 감사합니다 ... –

1

이 방법을 구현

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    return YES;//it will allow edit to you if NO it will not allow to you 
//return NO;when don,t want call that 
} 
관련 문제