Swift 制作心愿单功能
Swift make wishlist feature
所以我想制作这个简单的心愿单功能,当用户点击“心形”按钮时,它会将该数据从视图添加到心愿单视图。就像这样:
所以当用户点击那个心形按钮时,该电影将显示在这个心愿单视图中,如下所示:
现在,我的问题是如何通知我的 wishlistVc,以便它知道用户从电影列表中点击了一个新的“愿望清单”。我有一个想法,我应该使用委托,但我仍然不知道在这种情况下如何实现委托。
并且我使用“var movieList”将所有数据存储在 HomeVc 中,我的想法是当用户点击 tableview 中的心形按钮时,用户点击的数据将移至我的“let wishlist”中,所以我可以将它填充到我的 wishlistVC 中(但我不知道该怎么做,所以我需要帮助)
到目前为止这是我的代码:
class DefaultTableViewCell: UITableViewCell {
@IBOutlet weak var moviePosterImage: UIImageView!
@IBOutlet weak var movieTitleLabel: UILabel!
@IBOutlet weak var wishlistButton: UIButton!
var indexPath: IndexPath!
var delegate: DefaultTableViewDelegate?
var wishlistFlag:Bool = false
override func layoutSubviews() {
super.layoutSubviews()
wishlistButton.titleLabel?.text = ""
wishlistButton.addTarget(self, action: #selector(wishlistTapped(_:)), for: .valueChanged)
}
@IBAction func wishlistTapped(_ sender: UIButton) {
wishlistFlag = !wishlistFlag
delegate?.wishlistTrigger(row: indexPath.row)
if wishlistFlag == true {
wishlistButton.setImage(UIImage(named: "heart_fill"), for: .normal)
}else if wishlistFlag == false {
wishlistButton.setImage(UIImage(named: "heart"), for: .normal)
}
}
}
HomeVc(显示电影列表的vc):
var movieList : [Movie] = []
extension HomeVC: UITableViewDataSource, UITableViewDelegate {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return movieList.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let data = movieList[indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: "DefaultTableViewCell", for: indexPath) as! DefaultTableViewCell
cell.indexPath = indexPath
cell.movieTitleLabel.text = data.title
cell.moviePosterImage.sd_setImage(with: data.imageUrl)
cell.delegate = self
return cell
}
}
protocol DefaultTableViewDelegate {
func wishlistTrigger(row: Int)
}
这是我的心愿单Vc:
let wishlist : [Movie] = []
extension WishlistVc: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return wishlist.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let data = wishlist[indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: "DefaultTableViewCell", for: indexPath) as! DefaultTableViewCell
cell.movieTitleLabel.text = data.title
cell.moviePosterImage.sd_setImage(with: data.imageUrl)
cell.wishlistButton.titleLabel?.text = ""
cell.indexPath = indexPath
return cell
}
}
卡了整整2天了,还是不知道怎么解决。我感谢任何能帮助我的人。谢谢
像这样实现函数:
func wishlistTrigger(row: Int) {
self.myWishlistedItem.append(self.movieList[row]) //Add that wishlisted item in array
self.tableView.reloadData() //Now reload Table
}
所以我想制作这个简单的心愿单功能,当用户点击“心形”按钮时,它会将该数据从视图添加到心愿单视图。就像这样:
所以当用户点击那个心形按钮时,该电影将显示在这个心愿单视图中,如下所示:
现在,我的问题是如何通知我的 wishlistVc,以便它知道用户从电影列表中点击了一个新的“愿望清单”。我有一个想法,我应该使用委托,但我仍然不知道在这种情况下如何实现委托。
并且我使用“var movieList”将所有数据存储在 HomeVc 中,我的想法是当用户点击 tableview 中的心形按钮时,用户点击的数据将移至我的“let wishlist”中,所以我可以将它填充到我的 wishlistVC 中(但我不知道该怎么做,所以我需要帮助)
到目前为止这是我的代码:
class DefaultTableViewCell: UITableViewCell {
@IBOutlet weak var moviePosterImage: UIImageView!
@IBOutlet weak var movieTitleLabel: UILabel!
@IBOutlet weak var wishlistButton: UIButton!
var indexPath: IndexPath!
var delegate: DefaultTableViewDelegate?
var wishlistFlag:Bool = false
override func layoutSubviews() {
super.layoutSubviews()
wishlistButton.titleLabel?.text = ""
wishlistButton.addTarget(self, action: #selector(wishlistTapped(_:)), for: .valueChanged)
}
@IBAction func wishlistTapped(_ sender: UIButton) {
wishlistFlag = !wishlistFlag
delegate?.wishlistTrigger(row: indexPath.row)
if wishlistFlag == true {
wishlistButton.setImage(UIImage(named: "heart_fill"), for: .normal)
}else if wishlistFlag == false {
wishlistButton.setImage(UIImage(named: "heart"), for: .normal)
}
}
}
HomeVc(显示电影列表的vc):
var movieList : [Movie] = []
extension HomeVC: UITableViewDataSource, UITableViewDelegate {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return movieList.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let data = movieList[indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: "DefaultTableViewCell", for: indexPath) as! DefaultTableViewCell
cell.indexPath = indexPath
cell.movieTitleLabel.text = data.title
cell.moviePosterImage.sd_setImage(with: data.imageUrl)
cell.delegate = self
return cell
}
}
protocol DefaultTableViewDelegate {
func wishlistTrigger(row: Int)
}
这是我的心愿单Vc:
let wishlist : [Movie] = []
extension WishlistVc: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return wishlist.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let data = wishlist[indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: "DefaultTableViewCell", for: indexPath) as! DefaultTableViewCell
cell.movieTitleLabel.text = data.title
cell.moviePosterImage.sd_setImage(with: data.imageUrl)
cell.wishlistButton.titleLabel?.text = ""
cell.indexPath = indexPath
return cell
}
}
卡了整整2天了,还是不知道怎么解决。我感谢任何能帮助我的人。谢谢
像这样实现函数:
func wishlistTrigger(row: Int) {
self.myWishlistedItem.append(self.movieList[row]) //Add that wishlisted item in array
self.tableView.reloadData() //Now reload Table
}