2017-02-19 91 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

當你調用'deleteObject'時,你確定'ObjectCollection'不是'nil'嗎? – Losiowaty

+0

@Losiowaty是的,我相信它不是零。它確實將對象從集合中移除,因爲一旦我通過單擊它不顯示的單元格來選擇它。 – user2175783

回答

-1

確保reloaddata()之前必須刪除單元格,並在您dataArray中的細胞的OBJ。

我認爲方法numberOfItems:inSection,你的代碼是return dataArray.count,但是你不會刪除dataArray中的單元的obj,所以當你reloaddata()時,你的單元仍然在這裏。現在,我知道你的問題,你有兩個VC(讓我們稱之爲VC1和VC2),你單元格顯示在VC1上,當你點擊單元格時,推到VC2,點擊VC2的刪除按鈕,你想刪除VC1的單元格, 我對嗎 ?如果你想要做這方面的努力, 你可以做一個,屬性delegate,協議的方法,如在VC2 -(void)deleteCell

, 當你推到VC2,設置VC1爲VC2的委託,覆蓋在協議方法您的VC1, 您單擊VC2的刪除按鈕,在您的響應方法中,使用[self.delegate deleteCell]。當你回到VC1時,它會自動刪除單元格和單元格的obj。

同時,您還可以使用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() 
    }