2012-07-25 2 views
0

이미지를 표시하는 표가 있습니다. 라이브로 검색 할 수 있으며 표시되는 셀을 조정합니다. 이미지는 즉시 사용할 수없는 경우 네트워크를 통해 동시 NSOperation 하위 클래스를 사용하여 백그라운드에로드됩니다.필터링 된 표의 셀을 백그라운드에서 업데이트 하시겠습니까?

이미지를 가져온 후에는 표시 할 테이블을 업데이트하고 싶습니다.

어떻게하면 올바른 셀을 업데이트 할 수 있습니까?

  • tableView:cellForRowAtIndexPath:에 내장 된 셀에 의존 할 수 없습니다. 셀이 다른 행에 대해 용도가 변경되었을 수 있기 때문입니다.
  • tableView:cellForRowAtIndexPath:에 전달 된 indexPath은 검색 기간이 변경되어 업데이트가 시작된 이후로 변경되었을 수 있으므로 사용할 수 없습니다.
  • 셀 자체가 UITableViewCell의 인스턴스이고 메타 데이터가 없으므로 테이블의 보이는 셀을 검색 할 수 없습니다.
  • 변경 사항을 적용 할 테이블을 모르므로 필터링 된 목록을 검색 할 수 없습니다.

무엇이 누락 되었습니까?

답변

1

아마도 가장 간단한 해결책은 추적 속성을 추가하기 위해 UITableViewCell을 하위 클래스로 만드는 것일 수 있습니다. 이런 식으로 뭔가 : 당신이 셀을 설정 NSURL 당신이에서 URL을 다운로드에 trackingValue을 설정

@interface TrackingTableViewCell : UITableViewCell 
@property (strong) id trackingValue; 
@end; 

@implementation TrackingTableViewCell 
// Default @synthesize as of Xcode 4.4! 
@end 

. 이미지로드가 끝나면 보이는 셀의 trackingValue를 확인하십시오. 일치하는 것을 찾으면 좋습니다. 그렇지 않은 경우 아무 데나 설정하지 마십시오.

이론적으로는 objc_setAssociatedObject() API를 사용하여 동일한 작업을 수행 할 수 있지만 간단한 하위 클래스를 만들어 값을 추적하는 것 이상의 가치가있는 것은 아닙니다.

+0

나는이 아이디어를 좋아한다. 관련 : 어떤 tableview가 표시되는지 어떻게 알 수 있습니까? 아니면 항상 둘 다 검색해야합니까? –

+0

두 테이블 뷰에 -indexPathForCell :을 요청하여 셀이 어느 셀에 표시되는지 신속하게 확인할 수 있습니다. –

+0

감사합니다. 대답은 훌륭했습니다. 나는'UITableView * tableToSearch = self.searchDisplayController.active? self.searchDisplayController.searchResultsTableView : self.올바른 서브 클래스의 셀을 visibleCell에 검색 한 다음 제안한대로 추적 값을 비교합니다. –

2

앱 스토어의 앱에서 정확하게 작동합니다. 이미지가 도착할 때 알림을받는 알림 컨트롤러에서 알림 처리기를 만들었습니다. 그 이미지는 그와 연관된 태그를 가지고 있는데, 필요한 뷰에 매핑 할 수있는 것입니다.

셀을 만들 때 이미지와 관련된 태그와 일치하는 고유 한 태그가있는 UIImageView를 contentViews 배열에 추가합니다. 충돌을 피하기 위해 10,000과 같이 상쇄 할 수 있습니다.

그런 다음 UITableView에 보이는 셀 배열을 요청합니다. 각 셀의 contentView에 viewWithTag : tag (고유 태그)를 요청하면서 반복합니다. 발견되면, 내가 맞는 UIImageView, 그리고 내가 이미지를 설정합니다.

분명히 tableView에 셀을 제공 할 때는 항상 ImageView에 적절한 태그를 제공해야합니다.

+0

태그 관리에 서브 클래 싱을 선호하기 때문에 결국 BJ의 접근 방식이 끝났지 만 답변에 감사드립니다. :) –

관련 문제