2017-02-19 16 views
1

У меня есть ListViewController, добавляющий вид с помощью метода нижеКак удалить ячейки в UIViewController

class ListViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout { 

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    let obj: AnObject = ObjectCollection!.getObject(index: indexPath.item) 
    let cell: UICollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: NSStringFromClass(UICollectionViewCell.self), for: indexPath as IndexPath) 
    let cellView: UIImageView = UIImageView(image: obj.image) 
    cellView.frame = cell.bounds 
    cell.contentView.addSubview(cellView) 

    return cell 
} 

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

Мой метод удаления является

func deleteObject(index: Int) { 
     // delete from the collection 
     ObjectCollection?.deleteObject(index: index) 
     self.collectionView.reloadData() 
    } 

мне нужно явно удалить ячейку или его содержимое?

+2

Ну что такое 'ObjectCollection'? Потому что, очевидно, это не сохраняется после удаления объекта из него, иначе он не будет отображаться снова при перезагрузке tableView – Pierce

+1

Вы уверены, что 'ObjectCollection' не' nil', когда вы вызываете 'deleteObject'? – Losiowaty

+0

@ Losiowaty Да, я уверен, что это не ноль. Он удаляет объект из коллекции, как только я его выберу, щелкнув ячейку, которую он не отображает. – user2175783

ответ

-1

убедитесь, что перед reloaddata() вы должны удалить ячейку и объект obj в вашем dataArray.

Я думаю, что метод numberOfItems:inSection, вы код return dataArray.count, но вы не удаляете obj ячейки в dataArray, поэтому, когда вы reloaddata(), ваша ячейка все еще здесь.

Теперь, я знаю вашу проблему, у вас есть два VC (назовем их VC1 и VC2), вы отобразите ячейку на VC1, когда вы нажмете ячейку, нажмите на VC2, нажмите кнопку удаления VC2, вы хотите удалить ячейку VC1 , я прав ?

, если вы хотите сделать это усилие, вы можете сделать , свойство delegate, метод протокола, как -(void)deleteCell в вашем VC2, , когда вы нажимаете на VC2, установите VC1 в качестве делегата VC2, в перезаписать метод протокола в ваш VC1, вы нажмете кнопку удаления VC2, в вашем методе ответа используйте [self.delegate deleteCell]. когда вы вернетесь в VC1, он удалит автоматическую функцию ячейки и ячейки.

Между тем вы также можете использовать NSNotification, чтобы приложить усилия.

+0

В этом вопросе есть метод 'deleteObject', и OP упоминает в комментариях, что он правильно называется. – Losiowaty

1

Это может сработать, если вы попробуете метод deleteItems.

func deleteObject(indexPath: IndexPath) { 
     // delete from the collection 
     ObjectCollection.deleteObject(index: indexPath.row) 
     self.collectionView.deleteItems(at: [indexPath]) 
//  self.collectionView.reloadData() 
    }