2017-10-17 19 views
0

UITableViewcheckmark起こって、私はのUITableViewは問題

コード

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
{ 
    return dizi.count 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
{ 
    let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "cell") 
    cell.textLabel?.text=dizi[indexPath.row] 

    return cell 
} 

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

first

second

私はそれをどのように修正することができますスクロールされたときに選択解除される解除しますか?私を助けてください。

答えて

0

ザッツあなたは

を再利用するとき、それはそのUIの状態を復元することを確認するためにあなたの責任をスクロールし、そのときのUITableViewのセルに、そのように選択indexPath

01を保持する配列を作成し、再利用されますので、
var selectedIndex : [IndexPath]! = [IndexPath]() 
cellForRowAtIndexPath

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
{ 
    let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "cell") 
    if if selectedIndex.contains(indexPath) { 
     cell.accessoryType = UITableViewCellAccessoryType.checkmark 
    } 
    else { 
     cell.accessoryType = UITableViewCellAccessoryType.none 
    } 
    cell.textLabel?.text=dizi[indexPath.row] 

    return cell 
} 

最後にselectedIndexArray

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
{ 
    if tableView.cellForRow(at: indexPath)?.accessoryType == UITableViewCellAccessoryType.checkmark 
    { 
     tableView.cellForRow(at: indexPath)?.accessoryType = UITableViewCellAccessoryType.none 
     self.selectedIndex = selectedIndex.filter({ 
      return $0 != indexPath 
     }) 
    } 
    else 
    { 
     tableView.cellForRow(at: indexPath)?.accessoryType = UITableViewCellAccessoryType.checkmark 
     self.selectedIndex.append(indexPath) 
    } 

} 
+0

てくれてありがとう更新そんなにはtiskender2 @ – Tiskender2

+0

を解決ありがとう:常に歓迎バディを:)私は私ができる嬉しいです助けてください:)ハッピーコーディング –

0

またをcellForRowAtに設定する必要があるため、スクロールアップ/ダウンテーブルを使用すると、セルが再利用されるためです。

どうすればよいですか?行の1つの配列と同じサイズをとり、値が0で繰り返し、あなたが任意の行をチェックしますかときにindexPath.rowに値1を更新し、任意の行のチェックを外した場合、その後indexPath.row

とし、cellForRowAt方法return cell前プット・条件などに値0を更新

if checkUncheckArr[indexPath.row] == 0 { 
     tableView.cellForRow(at: indexPath)?.accessoryType = UITableViewCellAccessoryType.non 

} 
else { 
     tableView.cellForRow(at: indexPath)?.accessoryType = UITableViewCellAccessoryType.checkmark 

} 
+0

は、あなたの答え – Tiskender2