Swift-从另一个ViewController插入TableView中的项目
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift-从另一个ViewController插入TableView中的项目相关的知识,希望对你有一定的参考价值。
我似乎在将项目添加到另一个tableView
中的ViewController
时遇到问题,但是如果显示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元素。
其次,强烈建议您不要对数据源使用多个数组。绝对不要那样做。创建一个自定义结构来保存一项的所有参数(在下面的代码中称为Item
),并使用one数据源数组(称为datasourceArray
)。
然后将项目分配给临时变量(wishList
中的vc
,并将值分配给viewDidLoad
中的UI元素
此示例假定来自三个数组(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)
}
并且在viewDidLoad
中的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()
}
以上是关于Swift-从另一个ViewController插入TableView中的项目的主要内容,如果未能解决你的问题,请参考以下文章
Swift - 从另一个 ViewController 在 TableView 中插入项目
Swift:使用完成处理程序从另一个通知 ViewController