Swift-从另一个ViewController在TableView中插入项目

时间:2019-12-30 18:20:47

标签: ios swift uitableview uicollectionview delegates

我遇到了一个问题,我似乎将项目添加到另一个tableView的{​​{1}}中,但是如果显示VC则它们不会出现。

我也有不同的ViewController,这使它变得更加困难:

这是我的第一个tableViews的内部内容,在这里我可以访问第二个ViewControllerA

ViewControllerB

这是在我的第二个ViewController中:

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

    // if indexPath.item is less than data count, return a "Content" cell
    if indexPath.item < wishListTitlesArray.count {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ContentCell", for: indexPath) as! ContentCell

        cell.cellLabel.text = wishListTitlesArray[indexPath.item]

        cell.buttonView.setImage(wishListImagesArray[indexPath.item], for: .normal)

        cell.customWishlistTapCallback = {

            // track selected index
            self.currentWishListIDX = indexPath.item

            let vc = self.storyboard?.instantiateViewController(withIdentifier: "WishlistVC") as! WishlistViewController
            // set image
            vc.wishlistImage.image = self.wishListImagesArray[indexPath.item]
            // set label
            vc.wishlistLabel.text = self.wishListTitlesArray[indexPath.item]
            // set wishlist
            vc.theTableView.wishList = self.userWishListData[indexPath.item]

            vc.currentWishListIDX = self.currentWishListIDX

            vc.userWishListData = self.userWishListData

            vc.theTableView.tableView.reloadData()
            self.present(vc, animated: true, completion: nil)

        }

        return cell
    }

func insertWish(){

    insertWishDelegate?.insertWish(wishName: popUpView.whishName!, idx: selectedWishlistIDX!, currentWishlistIDX: currentWishListIDX,data: userWishListData)

    // save Wish to database -> DataHandler
    saveWish()

}

呈现第二个ViewController可以正常工作。我传递的所有变量都是正确的。我唯一的问题是我无法插入“愿望”。没有任何错误。用户可以从第一个ViewController添加愿望:

func insertWish(wishName: String, idx: Int, currentWishlistIDX: Int, data: [[Wish]]) {
    // append the new wish to the user's currently selected wishlist
    var wishes: [Wish] = data[idx]
    wishes.append(Wish(withWishName: wishName, checked: false))
    userWishListData[currentWishlistIDX] = wishes
    // set the updated data as the data for the table view
    theTableView.wishList = userWishListData[currentWishlistIDX]
    theTableView.tableView.reloadData()
}

对于整个项目,您可以看一下我的git(尽管很混乱):Git Project

我可能会错过一些非常基本的东西,但是我无法落后于它,所以我非常感谢每一个帮助:)

1 个答案:

答案 0 :(得分:1)

您的代码无法正常工作,因为您正在实例化视图控制器之后立即访问vc中尚未连接的UI元素。

第二,强烈建议您不要对数据源使用多个数组。绝对不要那样做。创建一个自定义结构来保存一项的所有参数(在下面的代码中称为 Item ),并使用一个数据源数组(称为 {{ 1}} )。

然后将项目分配给临时变量(datasourceArray中的{wishList),然后将值分配给vc中的UI元素

此示例假定来自三个数组(viewDidLoadimagetitle)的值在自定义结构的一个实例中。您必须重新设计整个数据模型。在闭包中,将data实例传递到Item

vc

并在cell.customWishlistTapCallback = { // track selected index self.currentWishListIDX = indexPath.item let vc = self.storyboard?.instantiateViewController(withIdentifier: "WishlistVC") as! WishlistViewController vc.wishlist = datasourceArray[indexPath.item] vc.currentWishListIDX = self.currentWishListIDX vc.userWishListData = self.userWishListData self.present(vc, animated: true, completion: nil) } 的vc中填充UI元素并重新加载表格视图

viewDidLoad
相关问题