2013-03-27 2 views
1

문제점 :editingChanged 이벤트를 처리하는 방법과 개체 모델에서 내 텍스트 필드를 업데이트하는 다른 방법이 있습니다. 문제는 이벤트를 보낸 필드의 텍스트를 수정하면 editingChanged가 다시 트리거되고 무한 루프 (ios 5에서만 사용 가능)를 입력한다는 것입니다.텍스트 필드 무한 루프를 편집하십시오.

예 :이 문제를 해결하려면 어떻게해야

- (IBAction)updateFields:(UITextField *)sender { 
    if ([self myCustomValidation:sender]) { 
     ... //update model 
     //call another method that essentially does this 
     field1.text = @"someformatted text"; //causes infinite loop if any field == sender 
     field2.text = @"some more text"; 
    } 
} 

(setText: 메시지를 보내는 모든 방법을 sender을 통과하지 않고)?

+0

UITexfeild를 사용하고 있습니까? –

답변

2

editingChanged 제어 이벤트에 등록하는 대신 UITextFieldDelegate의 메소드 textField:shouldChangeCharactersInRange:replacementString:을 구현하는 것이 좋습니다.

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    ... //update model 
    //call another method that essentially does this 
    field1.text = @"someformatted text"; //causes infinite loop any field == sender 
    field2.text = @"some more text"; 
    return YES; // or NO, depending on you actions 
} 

documentation에 따르면,이 텍스트 필드에는 사용자가 입력 텍스트 필드에 새 문자 또는 기존 문자를 삭제 할 때마다이 메소드를 호출하여 목적

를 제공한다.

+0

내가 볼 때 프로그래밍 방식으로 텍스트를 업데이트 할 때 대리자 메서드가 호출되지 않습니다. – jermel

+0

대리자는 프로그래밍 방식의 변경이 아니라 사용자의 작업에서 호출됩니다. –

1

IBAction 메서드를 작성하는 대신 UITexFeild 대리자를 구현하기 만하면됩니다.

을 수정하는 을 찾으려면 shouldChangeCharactersInRange 대리인을 구현하십시오.

textFieldDidEndEditing 대리인을 끝 편집을 감지하려면 구현하십시오.

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range  replacementString:(NSString *)string 
{ 
    //write ur code here 
    return YES; 
} 

- (void)textFieldDidEndEditing:(UITextField *)textField{ 

} 
관련 문제