2010-05-18 2 views
1

그래서 이것은 흥미로운 문제입니다. 나는 텍스트 필드를 포함하는 사용자 정의 tableviewcells 있습니다. 내 cellForRowAtIndexPath에서 나는 셀의 텍스트 필드는 다음과 같습니다 editable-해야하는지 여부를 결정하는 if 문이있을 때 :편집이 완료되면 표 셀의 텍스트 뷰를 편집 할 수 없게하려면 어떻게해야합니까?

(self.isEditing) ? [infoCell.textField setEnabled:YES] : [infoCell.textField setEnabled:NO]; 

이 실제로 잘 작동 - 난 데 문제를 제외하고. 테이블 뷰가 표시 될 때 행의 텍스트 필드를 편집 할 수 없도록합니다. 사용자가 "편집"을 클릭하여 편집 모드로 전환하면 텍스트 필드를 편집 할 수 있습니다.

문제 : 필드를 편집하고 "완료"를 클릭하면 일반 표보기로 돌아가지만 키보드는 계속 표시되고 편집중인 마지막 셀의 텍스트 필드는 계속 편집 할 수 있습니다.

수행 할 내용 : 키보드가 사라져야하고 모든 셀의 텍스트 필드를 더 이상 편집 할 수 없습니다.

무엇이 잘못 될 수 있는지에 대한 아이디어가 있습니까? 찾을 물건?

감사합니다.

답변

2

유감스럽게도 UITextField를 사용 중지해도 키보드가 닫히지 않습니다. 현재 UITextField에 대한 포인터를 유지해야합니다. 그런 다음

UITextField *currentTextField; 

를 UITextFieldDelegate 프로토콜을 구현 : 먼저, 헤더 파일에 인스턴스 변수를 만듭니다. 더러운 작업은 다음과 같은 방법으로 수행됩니다 : 키보드를 기각하고 텍스트 필드를 해제 할 준비가되면

- (void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
    currentTextField = textField; 
} 

마지막으로, 단순히 전화 :

[currentTextField resignFirstResponder]; 
[textField1 setEnabled:NO]; 
[textField2 setEnabled:NO]; //ad nauseum 

행운을 빕니다!

+0

그건 완벽 했어 !! – Brad

1

나는 self.isEditing이 신뢰할 수 없다고 판결했습니다. 개별 셀을 편집하는 경우 "편집 모드"에있는 것과는 다르게 작동합니다.

다른 모든 셀에 대해 작업 할 때마다 테이블보기의 visibleCells 메서드를 반복하여 수동으로 조정합니다. 새 셀이 표시 될 때 어떤 일이 발생하는지 고려해야하지만, 이는 구현에 달려 있습니다.

NSArray *visibleCells = [self.tableView visibleCells]; 
for (UITableViewCell *cell in visibleCells) { 
    [cell doSomething]; 
} 

PS - 분명히 보이는 사각형을 반복 할 때 해당 셀을 건너 뛰어도됩니다. 당신이하는 일에 달려 있습니다.

+0

의견을 보내 주셔서 감사합니다. 나는 그걸 가지고 놀았지 만, 그걸로는 효과가 없을 것이라고 생각합니다. 셀은 사용자 정의 셀이며 셀 자체가 아니라 활성화 또는 비활성화해야하는 셀 안의 텍스트 필드입니다. 현재 cellForRowAtIndexPath에서이 작업을 수행하고 있으며 편집 모드에서 일반 모드로 전환 할 때 편집중인 셀에는 작동하지 않습니다. 매우 이상합니다. 그리고 btw, 자네 말이 맞다. 나는 신뢰할 수 없다는 것을 알고있다. 나는 내 자신의 isEditing 변수를 사용하고있다. – Brad

관련 문제