2016-07-03 4 views
0

У меня есть табличное представление, и мне нужно как-то сохранить те, которые были проверены ранее. Я сохраняю индексный путь тех, которые были проверены в массиве. теперь у меня есть код ниже, и я не знаю, как определить «ячейку» (элементы NSindexpath). Я уже пробовал это, но она возвращает Нилл и не работает: пусть ячейки = super.tableView.cellForRowAtIndexPath (элементы)Как получить доступ к tableviewcell по индексному пути в моей функции

override func viewWillAppear(animated: Bool) { 

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

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


    } 

Я уже пробовал это, но она возвращает Нилл и не работа: let cell = super.tableView.cellForRowAtIndexPath (items)

+1

Вы не сможете получить доступ к ячейкам в 'viewWillAppear', поскольку tableview еще не отобразил какие-либо ячейки. Вы должны использовать свой проверочный массив в 'cellforRowAtIndexPath' и установить/очистить галочку по мере необходимости. Это также позволит вам обрабатывать повторное использование ячеек – Paulw11

ответ

1

Если вам нужен доступ к камере, вы можете попробовать это:

let cell = tableView.cellForRowAtIndexPath(indexPath) 
+0

, когда я делаю эту ячейку, все еще возвращает nill, в то время как мой индексный путь не пуст. –

+0

Попробуйте этот код в viewDidAppear() –

+0

Спасибо, человек, он работал –

0

Лучше использовать данные вместо ячейки, как только ячейка отмечена, вы должны пометить данные, которые находятся за ячейкой. И когда вам нужно знать, какие отмечен, вы ищете данные, а не ячейку.

0

Кроме того, я amn't уверен, что если вы можете назвать этот делегат и DataSource методы в ViewWillAppear(), но вы не должны.
Если вы говорите, что у вас есть массив сохраненных indexPaths, то что вы можете сделать - Установите тип аксессуара ячейки прототипа в раскадровке как None. Это установит по умолчанию аксессуар всех ячеек в None.

В методе DataSource из cellForRowAtIndexPath определить свою ячейку как

`let cell = tableView.cellForRowAtIndexPath(indexPath) 

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

В методе делегата от didSelectRowAtIndexPath (используется для- это сохранит indexPaths клеток нажать и поставить галочку в их типу аксессуара. Это добавит в массиве только в том случае, что особенно 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.