在解除ImagePicker - Swift - iOS之后添加数据并重新加载CollectionView

时间:2016-10-28 07:27:41

标签: ios swift uitableview uicollectionview reloaddata

在我的应用中,用户可以使用imagepicker选择图像。在他选择之后,我想用新图像更新我的collectionview(或tableview)。 但即使调用重载funcs并且新项目在我的列表中,UI也不会刷新。

编辑突出显示:我使用取消关闭来简化代码,因为行为是相同的。 我知道我必须打电话给didFinishWith ......但是我想强调解雇所导致的行为。

var files = [File]() // populate my collectionview or tableview

// ... code
// ... more code 

func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {

    self.dismiss(animated: true) {

        let newFile = File(name: "test")
        self.files.append(newFile)

        DispatchQueue.main.async {
            self.collectionView?.reloadData()
            // self.tableView?.reloadData() has the same behavior 
        }
    }
}

如果我在collectionView-CellForItemAt中打印...我看到列表中有我的新元素,但它没有在屏幕上显示。

我尝试不同的东西,但对我来说没有任何作用或看起来很脏。有没有想过正确地执行此操作?

(我已经看到了这个主题:UICollectionView won't reloadData() after UIImagePickerController dismisses

编辑更多信息:

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

    return self.files.count
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ItemCell", for: indexPath) as! CollectionViewCell

        cell.file = self.files[indexPath.row]
        cell.filenameLabel.text = self.files[indexPath.row].name
        // other customization of cell
        print(cell.file.name)
        return cell
    }

2 个答案:

答案 0 :(得分:1)

您正在实施imagePickerControllerDidCancel。如果用户选择图像,则选择器不会使用imagePickerControllerDidCancel调用该委托,则会调用didFinishPickingMediaWithInfo

答案 1 :(得分:0)

尝试我的目标c代码:

[objCollectionView reloadData];

[objCollectionView.collectionViewLayout invalidateLayout];

 [objCollectionView performBatchUpdates:^{
                } completion:^(BOOL finished) {

                }];