2016-05-03 14 views
0

私の携帯電話でこれを実行すると、detailViewControllerから前後に移動した後にチェックマークがセルに割り当てられません。彼らは現在、チェックマークが割り当てられていないので、私はそれが選択されているセルにチェックマークを割り当てることを検討しています。あなたがここで何が起こっているか知っていれば、私に知らせてください!ありがとうこのコードではなぜ私はtableViewCellにチェックマークのアクセサリーを置くことができませんか?

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) 
    if cell.accessoryType == UITableViewCellAccessoryType.None 
     { 
     cell.accessoryType = UITableViewCellAccessoryType.Checkmark 
    } 

} 

答えて

1

現在、選択されているセルではなく、新しいセルをデキューしています。ただし、モデルオブジェクトを使用してセルがチェックされているかどうかにかかわらず、ビュー自体の状態は保持されません。デキュー/再利用されたセルは、選択されなくなります。例えば

、あなたはモデルオブジェクトの配列があるだろう:各オブジェクトの内部で

class YourObject { 
    var isSelected: Bool = false 
} 

var modelObjects: [YourObject] = [] 

をオブジェクトが選択されているか否かを示すプロパティがあるだろう、これはdidSelectRowAtIndexPathの内側に設定されます。モデルオブジェクトのプロパティが選択されている場合ので、.CheckmarkにセルのaccessoryTypeを設定している場合

var object = self.modelObjects[indexPath.row] 
object.isSelected = true 
tableView.reloadRowsAtIndexPaths([indexPath], rowAnimation: .Automatic) 

cellForRowAtIndexPath内には、確認することができます。

var object = self.modelObjects[indexPath.row] 

if object.isSelected { 
    cell.accessoryType .Checkmark 
} 
0

問題はdequeueReusableCellWithIdentifierが現在tableViewで表示されていないセルをデキュー、それがそのインデックスパスで表示されていますセルを返さないことです。

cellForRowAtIndexPathは、tableViewで表示されている場合、そのインデックスパスのセルを表示します。

accessoryTypeをそのセルに設定すると、表示されているセルが更新されます。

0

あなたが行っている方法では、選択されているセルを更新する代わりに、新しいセルをデキューしています。あなたが欲しいものを達成するためにはlet cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)let cell = tableView.cellForRowAtIndexPath(indexPath)に置き換えてください。

0

'if'と 'else'の両方を処理する必要があります。

private var selectedIndex: Int = -1  

if selectedIndex == indexPath.row 
{ 
    cell.accessoryType = UITableViewCellAccessoryType.Checkmark 
} 
else 
{ 
    cell.accessoryType == UITableViewCellAccessoryType.None 
} 
: 'cellForRowAtIndexPath' は、

関連する問題