1

テーブルビューのセルにチェックマークを表示しようとしていますが、チェックマークがたまにしか表示されず、スクロールすると消えてしまいます。

コードの下:

 
    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
                   
                }
            }    
        }

4

3 に答える 3

1

テーブルビューをスクロールしている間、チェックマークをテーブルビューに維持するには、コードで次の変更を行うだけです

ここに画像の説明を入力

結果 :

ここに画像の説明を入力

今は問題なく動作しています。どんな問題でも教えてください。間違いなくお手伝いします。お楽しみください..

于 2016-05-05T04:12:25.080 に答える
0
cell.textLabel?.text = self.dataArray[indexPath.row] as? String

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

if dataArray.containsObject(indexPath)

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

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

  • 選択された行 - セルが更新され、チェックマーク アクセサリが表示されます
  • テーブルがスクロールされ、 cellForRowAtIndexPath が呼び出されます - どの時点でもdataArrayインデックス パスが含まれないため、アクセサリは常にクリアされます。

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

于 2016-05-04T12:53:31.410 に答える