代码之家  ›  专栏  ›  技术社区  ›  Chris

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

  •  0
  • Chris  · 技术社区  · 5 年前

    tableView ViewController 但他们不会出现,如果提出的风险投资。

    我也有不同的想法 tableViews 这就更难了:

    ViewControllerA 从那里我可以进入第二个 ViewControllerB

    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中:

    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()
    }
    

    演示第二个ViewController效果很好。我传递的所有变量都是正确的。我唯一的问题是我不能插入一个“愿望”。没有什么差错。用户可以从第一个ViewController添加愿望:

    @objc func wishButtonTapped(){
        dismissPopUpView()
        insertWish()
    }
    

    对于整个项目,您可以查看我的git(尽管非常混乱): Git Project

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

    0 回复  |  直到 5 年前
        1
  •  1
  •   vadian    5 年前

    您的代码无法工作,因为您正在访问中的UI元素 vc 它们在实例化视图控制器之后还没有连接。

    Item )使用 datasourceArray ).

    然后将该项赋给一个临时变量( wishList )并将值赋给 viewDidLoad

    本例假设三个数组中的值( image , title data 项目 风险投资

    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元素并重新加载表视图

    var wishList : Item!
    
    override func viewDidLoad()
        super.viewDidLoad()
        wishlistImage.image = wishList.image
                // set label
        wishlistLabel.text = wishList.title
                // set wishlist
        theTableView.wishList = wishList.data
        theTableView.tableView.reloadData()
    }