2016-05-04 5 views
0

テーブルビューのセルにチェックマークを表示しようとしていますが、時々チェックマークが表示され、スクロールすると消えます。テーブルビュースウィフトでチェックマークを追加する方法

コードの下


 
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
 
    { 
 
     let cell = tableView.dequeueReusableCellWithIdentifier("vvxxx12", forIndexPath: indexPath) 
 
    
 
     // Configure the cell... 
 
     
 
    cell.textLabel?.text = self.dataArray[indexPath.row] as? String //in dataArray values are stored 
 
       
 

 
     if dataArray.containsObject(indexPath) 
 
     { 
 
      cell.accessoryType = .Checkmark 
 
     } 
 
     else { 
 
      cell.accessoryType = .None 
 
     } 
 
     return cell 
 
     } 
 

 
     func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
 
      if let cell = tableView.cellForRowAtIndexPath(indexPath) { 
 
       if cell.accessoryType == .Checkmark { 
 
        cell.accessoryType = .None 
 
        
 
       } else { 
 
        cell.accessoryType = .Checkmark 
 
        
 
       } 
 
      }  
 
     }

+0

ちょうど私の与えられたコードをチェックアウト、その仕事は正しく。あなたのために働いていたら、私の答えをアップアップして受け入れてください。 –

+0

新しいコードをスナップでチェックアウト –

+0

@パヴァンチェックマークで1つの項目だけを選択する必要があるときに質問が発生しました。どうすれば元のチェックマークが削除されるので、助けてください – globalworld

答えて

2

はちょうどあなたがテーブルビュー

enter image description here

の検索結果をスクロールしている間にテーブルビューにチェックマークを維持するために、あなたのコードの変更を次のようにします私は間違いなくあなたを助けてくれることを知っています。楽しんでください。

+0

感謝しますが、tableviewdidselectメソッドでcell.accessoeyTypeそれは私のエラーを表示すなわち私は、オブジェクトを追加し、オブジェクトのメソッドを削除しますが、その配列はそのようなmemerを持っていないことを示す使用されている識別子を解決する – globalworld

+0

私は間違ったロジックを使用していた。私はあなたがちょうど与えられたコードに従うことができるように私はuコードスナップを送り、私は実行し、この作業を正常にチェックします。 –

+0

うん...それは働いてくれてありがとう@Pavan – globalworld

0
cell.textLabel?.text = self.dataArray[indexPath.row] as? String 

これはdataArrayは、文字列が含まれていることを示唆しています。

if dataArray.containsObject(indexPath) 

これは、dataArrayにインデックスパスが含まれていることを示しています。これらの両方が真実であってはならない。データの1つの配列が意味を持ち、選択された行または行のチェック対象のもう1つの配列も意味がありますが、両方の配列が同じ配列ではありません。

何おそらく起こっては次のとおりです。

  • 行は選択された - セルは、チェックマークのアクセサリーを持っているように更新され
  • 表にスクロールし、cellForRowAtIndexPathが呼ばれている - どの時点でdataArrayはインデックスパスが含まれますので、付属品は、常にクリアされます。

行が選択されたときにモデルを更新したり、選択した行のインデックスパスを保存したり、モデルオブジェクトで選択したフラグを更新したりする必要があります。

enter image description here

その作業罰金が今、どれでも問題は私を聞かせて:

1

Swift 3私のために働いた

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

func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) { 
    yourtableView.cellForRow(at: indexPath as IndexPath)?.accessoryType = .none 
} 
関連する問題