2016-09-15 2 views
1

나는 usercount/topvotes sorta로 필터링하려고하는 방의 배열을 가지고 있습니다.배열을 정렬하면 잘못된 데이터가 셀에 표시됩니다.

필터 변경을 트리거하고 값을 "CurrentSearch"로 설정하고 내 테이블 데이터를 다시로드하는 버튼을 누르면 내 cellForRowAtIndexPath에 현재 currentsearch 값을 확인하고 이에 따라 목록을 필터링합니다.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 


     if currentSearch == "new" { 
     self.PersonalSearchesList = PersonalSearchesList.sorted{ $0.users < $1.users } 

     } else if currentSearch == "top" { 

      self.PersonalSearchesList = self.PersonalSearchesList.sorted{ $0.latestUser < $1.latestUser } 

     } 

필터링 전에 내 이미지/라벨이 완벽하게로드됩니다. 초기로드에서 currentSearch를 "new"로 설정하면 완벽하게 작동합니다. 일들이 펑키하게되는 필터를 바꾸기 시작하면됩니다. 셀의 무작위 복제본을 가져오고, 필터 사이를 스와핑하는 동안 잘못된로드가 일관되게 유지됩니다. 동일한 셀의 동일한 복제본이 동일한 위치에 만들어 지거나 배치됩니다.

셀 정보를 클릭하면 셀 정보가 인쇄됩니다 .. 셀 정보가 잘못로드 되어도 실제 정보는 정확하고 목록은 순서대로 정렬됩니다.

어떤 아이디어가 있습니까?

+4

이제까지 이제까지'cellForRowAtIndexPath'에 데이터 소스를 수정하지 마십시오을, 해당 제품 매우 나쁜 행동 정말 잘못, 당신은 당신이 당신의있는 tableView를 다시로드하기 전에 정렬해야 – Tj3n

+0

버튼 탭에서 정렬하는 위치로 이동 한 후 테이블 뷰를 다시로드하면 완벽하게 작동합니다. 나는 비디오에서이 한 번처럼 정렬되는 것을 보았고 그것을 할 수있는 방법으로 저와 붙어있었습니다. haha가 아닌가요. 그 사람을 칭찬해라. – user6820041

답변

1

당신은 같은 것을 수행해야합니다

var currentSearch: String { 
    didSet { 
    // sort your array 
    tableView?.reloadData() // reload data 
    } 
} 
+0

예. 그게 바로 내가 필요로하는 것입니다! 초기로드에서는 어디에서 정렬 할 수 있습니까? firebase에서 내 데이터를 가져올 것입니다. 그래서 viewdidload에서 currentSearch =를 설정할 수 없습니다. 배열은로드가 채워지지 않을 수도 있습니다. 배열에 append 할 때마다 정렬이 실행되므로 항목이 추가 될 때마다 정렬되거나 펑키 될 것입니다. – user6820041

0

귀하가 tableview을 스크롤하거나 다시로드 할 때마다 매번 정렬 할 때마다 정렬됩니다. 그래서 다른 방법으로 다른 곳에서 데이터를 정렬하고 성공적으로 다시 정렬하면 tableview을 정렬합니다.

관련 문제