我遇到了一个问题,我似乎将项目添加到另一个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
我可能会错过一些非常基本的东西,但是我无法落后于它,所以我非常感谢每一个帮助:)
答案 0 :(得分:1)
您的代码无法正常工作,因为您正在实例化视图控制器之后立即访问vc
中尚未连接的UI元素。
第二,强烈建议您不要对数据源使用多个数组。绝对不要那样做。创建一个自定义结构来保存一项的所有参数(在下面的代码中称为 Item
),并使用一个数据源数组(称为 {{ 1}} )。
然后将项目分配给临时变量(datasourceArray
中的{wishList
),然后将值分配给vc
中的UI元素
此示例假定来自三个数组(viewDidLoad
,image
和title
)的值在自定义结构的一个实例中。您必须重新设计整个数据模型。在闭包中,将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