迅速:呼叫willDisplay

时间:2018-08-12 06:38:56

标签: ios swift

我有collectionView。我有代码:

func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {

    if UserDefaults.standard.bool(forKey: "purchase") {

        myCell.cover.image = nil

    }
}

我还有secondViewController。我使用此代码执行secondViewController

let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
let imageRevealVC = mainStoryboard.instantiateViewController(withIdentifier: "InfoViewController") as! InfoViewController
imageRevealVC.modalPresentationStyle = .overCurrentContext
self.present(imageRevealVC, animated: false, completion: nil)

如果我购买产品,则需要从secondViewController返回代码后调用willDisplaycell删除图像。可能吗?

2 个答案:

答案 0 :(得分:0)

当您从注释中也得到想法时,应该重新加载collectionView,以便在加载collectionView单元的UI时对其进行任何更改,并且数据源将发生任何更改。就像您要对购买的产品的状态进行编辑,还是要从列表中删除购买的项目。

现在,您应该在哪里进行更新?

每次您弹出viewController时,它将带您到以前的viewController。然后viewWillAppear方法将被调用。

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)    
  self.collectionView.reloadData() 
}

答案 1 :(得分:0)

您已将视图控制器发送到secondViewController

在secondViewController中创建属性

express

创建secondViewController时,发送父级

var parentVC: YOURVIEWCONTROLLER?

在secondViewcontroller中,您需要做的是更改数据模型。完成后,例如在okButton中,调用parentVC重新加载该索引路径

let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
imageRevealVC = mainStoryboard.instantiateViewController(withIdentifier: "InfoViewController") as! InfoViewController
imageRevealVC.modalPresentationStyle = .overCurrentContext

imageRevealVC.parentVC = self

self.present(imageRevealVC, animated: false, completion: nil)

在您的parentViewController中创建一个乐趣,以重新加载所选的索引路径。您必须先保存它,然后再进入seconfViewController

self.parentVC?.reloadItem()