2017-05-17 1 views
0

tableView에 2 개의 섹션이 있으며 multipleSelection이 true입니다. 섹션 1에서 첫 번째 셀을 선택한 다음 아래로 스크롤하면 두 번째 섹션의 첫 번째 셀이 이미 선택되고 일부 임의 스크롤에서 섞여 있습니다. 당신이 cellForRow(at:) 에 세포를 얻을 수 dequeueReusableCell(withIdentifier:)를 사용하는 것이TableView AccessoryType 체크 표시 셔플

또한 나는의 처음에 당신이 당신의 TableView에서 10 개 보이는 세포가 있다고 가정 해 보자 나는 가정 checkmark

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     tableView.cellForRow(at: indexPath)?.accessoryType = .checkmark 
    } 
    func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) { 
     tableView.cellForRow(at: indexPath)?.accessoryType = .none 
} 

답변

1

을 표시하는 cellForRowAt로 작성된 코드가 없습니다. 이제 위로 스크롤하고 cellForRow(at:)이 다음 셀에 대해 호출되면 새 셀이 만들어지고 (재활용 풀이 비어 있음) TableView의 맨 아래에 추가됩니다. 상단의 셀이 화면에서 사라지 자마자 재활용 풀에 추가됩니다. 더 이상 스크롤을 알고 있으면 다시 cellForRow(at:)이 호출되고 t의면에 호출됩니다. 그러나 이제는 새 셀을 만드는 대신 다음 셀을 재활용 풀에서 꺼내고이 셀을 맨 아래에 추가합니다. 속성 값을 변경하지 않으면 값이 재활용 풀에 추가되기 전에 유지됩니다. 당신은 당신의 UITableViewCell 서브 클래스의 prepareForReuse()에 기본값 또는 확인하고, 새로운 UITableViewCell 클래스를하려고 예를 var isSelect: Bool = false에 대한 새로운 변수를 추가 할 수 있습니다 cellForRow(at:)

0

의 모든 값을 설정하는 셀을 재설정해야 하나. func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 판단 isSelect의 값을 해당 표시 처리를 수행 할 수 있습니다. tableView를 선택한 경우이 셀의 isSelectreloadData()을 변경하십시오. 미안, 내 영어가 좋지 않아, 표현이 분명하지 않을 수 있습니다.

0

셀은 tableview.You 선택한 상태를 표시하려면 배열 모델이나 사전 모델을 사용해야 재사용됩니다. like :

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     selectedArray[indexPath.row] = true 
     tableView.reload() 
} 

func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) { 
     selectedArray[indexPath.row] = false 
     tableView.reload() 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    //init cell 
    let selected = selectedArray[indexPath.row] 
    cell.accessoryType = selected ? .checkmark : .none 
} 
+0

@ syimalome 선택/선택 해제 할 때마다 tableView를 다시로드하는 올바른 방법이 있습니까? – Nitesh

+0

그냥 간단합니다 :). 'tableView.reloadRows (at : [indexpath], with : .none)'를 대신 사용할 수 있습니다. – simalone

관련 문제