0

テーブルビューがあり、以前にチェックしたものを何らかの方法で保存する必要があります。チェックインされたもののインデックスパスを配列に保存しました。今、私は以下のコードを持っていますが、「セル」を定義する方法がわかりません(項目は NSindexpath です)。私はすでにこれを試しましたが、nill を返し、機能しません: let cell = super.tableView.cellForRowAtIndexPath(items)

override func viewWillAppear(animated: Bool) {

    for items in indexpatharray{
        if !indexpatharray.isEmpty{
        let cell = 

        cell!.accessoryType = UITableViewCellAccessoryType.Checkmark;
        cell!.selectionStyle = .None


    }

私はすでにこれを試しましたが、nill を返し、機能しません: let cell = super.tableView.cellForRowAtIndexPath(items)

4

3 に答える 3

1

セルへのアクセスが必要な場合は、これを試すことができます:

let cell = tableView.cellForRowAtIndexPath(indexPath)
于 2016-07-04T04:11:29.683 に答える
0

セルの代わりにデータを使用することをお勧めします。セルがマークされたら、セルの背後にあるデータをマークする必要があります。マークされているデータを知る必要がある場合は、セルではなくデータを探します。

于 2016-07-04T02:55:43.010 に答える
0

また、これらのデリゲート メソッドとデータソース メソッドを ViewWillAppear() で呼び出すことができるかどうかはわかりませんが、そうすべきではありません。
保存された indexPath の配列があると言う場合、できることは次のとおりです。ストーリーボードのプロトタイプ セルのアクセサリ タイプを None に設定します。これにより、すべてのセルのデフォルト アクセサリが [なし] に設定されます。

cellForRowAtIndexPath の dataSource メソッドで、セルを次のように定義します。

`let cell = tableView.cellForRowAtIndexPath(indexPath)

if(array.contains(indexPath.row)){
   cell!.accessoryType = UITableViewCellAccessoryType.Checkmark;
}
`

didSelectRowAtIndexPath のデリゲート メソッドで (これは、タップしたセルの indexPath を格納し、アクセサリ タイプにチェックマークを付けます。特定の indexPath がまだ存在しない場合にのみ、配列に追加されます。)

{
    let cell = tableView.cellForRowAtIndexPath(indexPath)
    tableView.deselectRowAtIndexPath(indexPath, animated: true)

    if(!(array.contains(indexPath.row))){
       cell!.accessoryType = UITableViewCellAccessoryType.Checkmark;
       array.append(indexPath.row)
    } else { //to flip the state from Checkmark to None
       cell!.accessoryType = UITableViewCellAccessoryType.None;
    }  
    tableView.deselectRowAtIndexPath(indexPath, animated: true)     
}

注: これは、大規模なデータ セットを扱っていない場合にのみ有効な方法です。その場合は、Core Data と NSFetchResultsController を調べることをお勧めします。

于 2016-07-04T06:04:12.853 に答える