2011-01-09 3 views
2

이 이상한 상황이 발생합니다. 사용자가 셀을 선택하면 긴 (네트워크) 프로세스가 시작되는 UITableView가 있습니다. 그래서 백그라운드 스레드에서이 작업을 수행했으며 (didSelectRowAtIndexPath에) 액세서리보기로 UIActivityIndicatorView를 배치했습니다. 이것은 내가 쓴 것입니다 : 내가 jQuery과로 돌아갈 때visible view가 변경된 후 UITableViewCell의 accessoryView가 사라집니다.

UITableViewCell* cell = [self.tableView cellForRowAtIndexPath:indexPath]; 
UIActivityIndicatorView* activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; 
cell.accessoryView = activityView; 
[activityView startAnimating]; 
[activityView release]; 

모든 (표시등이 애니메이션) 로딩 과정에서, 나는의 UITabBar를 사용하여보기를 전환하는 경우, 그 제외하고는 제대로 작동하는 것 같다 , 거기에 있어야 할 UIActivityIndicatorView가 사라졌습니다. 내가 뭘 잘못했는지 생각해? 감사!

답변

2

나는이 문제를 되돌아보고 있었고, 지금 질문을 읽은 후 웃고있다 :-) 내 자신의 질문에 대한 답변은 : 코드에 문제가 없다는 것이고, 그것은 매우 잘 작동한다. 하지만 UIActivityIndicatorView를 흰색으로 만들면 흰색 배경에서보기가 어려워집니다 .-D :-D 게시 된 코드가 정확합니다.

+0

이 글을 읽으면 정말 바보 같은 기분이 들게되어 기쁘다. – odyth

1

다른 탭으로 이동 한 후 테이블보기로 돌아 가면 cellForRowAtIndexPath: 메시지가 테이블보기 컨트롤러로 전송되어 표 셀을 표시하지만 활동 표시기보기가 셀의 보조보기로 설정되었습니다. didSelectRowAtIndexPath: 방법. 따라서 본질적으로 셀을 선택했을 때 셀을 변경 했으므로 (즉, 활동 표시기보기가 표시됨), 뷰를 나가 다시 돌아 오면 cellForRowAtIndexPath: 메서드가 셀을 다시 표시하는 데 사용되었습니다 (따라서 활동 표시기가 없음). 전망).

현재 활동 표시기보기가있는 셀을 추적하고 cellForRowAtIndexPath: 방법으로 UIActivityIndicatorView를 사용하여 해당 셀의 보조보기를 설정해야합니다. 셀과 관련된 활동이 완료되면 해당 셀에 대한 활동 표시기보기가 표시되지 않으므로 활동이 아직 완료되었는지 여부를 추적해야합니다. 이 작업을 수행 할 수있는 방법은 여러 가지가 있으므로 자신의 상황에 가장 적합한 것이 무엇인지 결정해야합니다.

다른 탭보기에서 테이블보기로 돌아갈 때 cellForRowAtIndexPath: 메시지가 전송 된 것은 사실이 아니므로 위의 "삭제"했습니다.

+0

또한 셀을 재사용하는 경우 cellForRowAtIndexPath에있는 각 셀의 액세서리보기를 명시 적으로 설정해야합니다. 예를 들어 활동 표시기보기가있는 셀을 재사용하지 않도록해야합니다 그렇지 않은 셀 (그러나 셀을 표시 할 셀) – yabada

+0

답을 올바르게 이해했다면 문제는 UIActivityIndicatorView를 다시 설정하지 않고 셀을 다시 만드는 것입니다. 그러면 UIActivityIndicatorView가 손실됩니다. 이 올바른지? 나는 세포를 한 번 재배치하면 재사용되는 세포에서 세포가 재생되기 때문에 영원히 머물러있을 수 없다고 생각합니다. 문제는 탭으로 다시 전환 한 후에도 활동 표시기가 표시되지 않지만 새 셀에 대한 새 요청이 표시되지 않는다는 것입니다. 따라서 이전 셀이되어야합니다. 내가 맞습니까? 아니면 무슨 일이 일어 났는지 오해 한 것일까 요? 감사! –

+0

'cellForRowAtIndexPath :'에 중단 점을 설정하고 테이블보기로 탭으로 다시 전환 할 때 중단 점을 확인하십시오. 그런 다음 해당 메소드의 활동 표시기에 부속보기를 설정해야합니다. 너가 그것을 명중하지 않으면 그때 그것은 다른 것이다. – yabada

관련 문제