gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 23:21:55 24 4
gpt4 key购买 nike

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

我也有不同的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

我可能错过了一些非常基本的东西,但我无法理解它是什么,所以我非常感谢每一个帮助:)

最佳答案

您的代码无法工作,因为您正在访问 vc 中的 UI 元素,这些元素在实例化 View Controller 后(尚未)立即连接。

其次,强烈建议您不要对数据源使用多个数组。永远不要那样做。创建一个自定义结构来保存一个项目的所有参数(在下面的代码中称为 Item)并使用 one 数据源数组(称为 datasourceArray).

然后将项目分配给一个临时变量(vc中的wishList),并将值分配给viewDidLoad中的UI元素>

此示例假定来自三个数组(imagetitledata)的值在自定义结构的一个实例中。您必须重新设计整个数据模型。在闭包中将 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)
}

并在 viewDidLoad 中的 vc 中填充 UI 元素并重新加载 TableView

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

关于ios - Swift - 从另一个 ViewController 在 TableView 中插入项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59535191/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com