2013-02-27 2 views
2

텍스트 필드와 다른 레이블이있는 셀이 있습니다. 기본적으로, 사용자가 키보드로 데이터를 입력 한 후에는 다른 텍스트 필드 (다양한 방법을 통해)로 이동할 수 있고 포인터로 이동하려는 textField를 저장 한 다음 텍스트 필드의 didEndEditing 메서드를 트리거하는 첫 번째 응답자를 설정합니다. didEndEditing에서 나는 다양한 레이블을 업데이트하기 위해 tableData를 다시로드하는 새로 고침 메서드를 호출 한 다음 저장 한 텍스트 필드에 setFirstResponder를 다시 시도합니다.tableView reloadData가 텍스트 필드를 잃습니다. 포커스

결과적으로 키보드는 화면에 머무르지 만 텍스트 필드는 포커스를 얻지 못합니다. 그러나 다시 시도하면 두 번째로 작동합니다 ...

다음은 몇 가지 코드입니다. 계산 및 로그 등을 다루는 일이 많이 줄어들 었음을 명심하십시오.이 문제와 관련된 내용 만 추가했습니다.

편집 또한 화살표 버튼을 사용하여 이동 중임을 언급했습니다. 화살표 버튼을 사용하지 않으면 문제가 발생합니다. 텍스트 필드를 수동으로 두 번 클릭 (또는 클릭)해야 다른 텍스트 필드를 벗어난 후 포커스를받을 수 있습니다.

//user presses an arrow button to enter textfield 

//logic is done here to find what the next textfield would be 

_nextTextFieldSelection = (UITextField *)[[_tableView cellForRowAtIndexPath:destinationIndexPath] viewWithTag:newTag]; 
[_nextTextFieldSelection becomeFirstResponder]; 


- (void)textFieldDidEndEditing:(UITextField *)textField 
{ 
    //some stuff for calculations 
    [self refreshScreen] 
} 

- (void)refreshScreen 
{ 
    [_tableView reloadData]; 
    //set tables values 

    [_nextTextFieldSelection becomeFirstResponder]; 
} 
+0

«계산 및 로그 등으로 인해 많은 문제가 발생했습니다.이 문제와 관련된 항목 만 추가했습니다.»AMEN을받을 수 있습니까? –

+0

테이블 뷰를 다시로드 한 후에 다른 텍스트 필드가 있으면 놀라지 않을 것입니다. 'reloadData' 바로 다음에'[[_tableView cellForRowAtIndexPath : destinationIndexPath] viewWithTag : newTag];를 통해 참조를 다시 가져 와서 여전히'_nextTextFieldSelection'와 같은 객체인지 확인하십시오. –

+0

이것은 의미가 있습니다, 나는 그것을 시도하고 볼 것입니다. – JMD

답변

0

테이블을 다시로드하면 셀이 재생성됩니다. 캐시 된 nextTextFieldSelection은 더 이상 올바른 텍스트 필드 인스턴스에 대한 참조가 아닐 수도 있습니다. 텍스트 필드 대신 indexPath를 캐싱 한 다음 태그를 사용하여 인덱스 경로가 지정된 셀에서 적절한 텍스트 필드를 가져옵니다.

관련 문제