Home > Software engineering >  Swift make wishlist feature
Swift make wishlist feature

Time:12-20

so i want to make this simple wishlist feature for when the user tapped "heart" button it will add that data from view a to wishlist view. just like this :

enter image description here

so when user tapped that heart button, that movie will show in this wishlist view like this :

enter image description here

now, my question is how do i notify my wishlistVc so that it knows theres a new "wishlist" that user tapped from the movie list. im have an idea that i should use delegate, but still i cant figure it out how to implement delegate in this case.

and i use "var movieList" to store all the data in HomeVc, and my idea is when the user tapped that heart button in tableview, that data that user tapped with will move into my "let wishlist", so i can populate it on my wishlistVC ( but i dont know how to do this so i need help)

so far this is my code :

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 (the vc that shows the movie list):

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

this is my wishlistVc: 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
}
}

ive been stuck for 2 whole days now i still dont know how to figure this out. i Appreciate anyone that can help me. Thanks

CodePudding user response:

Implement func like:

func wishlistTrigger(row: Int) {
    self.myWishlistedItem.append(self.movieList[row]) //Add that wishlisted item in array
   self.tableView.reloadData() //Now reload Table
}
  • Related