So i'm trying to pass data through multiple views but having a lot of bother. Essentially i'm trying to create a library/playlist in a table view
I have a table view where the user searches for movies (movie details from API ) and taps their selected movie which then segue to another view controller which displays more info on the users selection.
I'm then attempting to implement an 'add to library' button to then input this data into the table cell in a third view controller. The first segue (to movieDetailsVC) works perfectly however i'm having trouble sending data to the third view controller
I have assumed that in order to display this data in a table view it must first segue to the TableViewCell and then segue again to the final view controller?
MovieSearch VC (initla view controller sends movie data to detail VC)
...
overridefunc prepare(for segue: UIStoryboardSegue, sender: Any?) {
let indexPath = tableView.indexPathForSelectedRow
let index = indexPath?.row
let movieDetails = newMovies[index!]
let movieDetailViewController = segue.destination as! MovieDetailViewController
movieDetailViewController.posterUrl = movieDetails.value(forKeyPath: "backdrop_path") as? String
movieDetailViewController.coverUrl = movieDetails.value(forKeyPath: "poster_path") as? String
movieDetailViewController.movieTitle = movieDetails.value(forKeyPath: "title") as? String
movieDetailViewController.movieRating = movieDetails.value(forKeyPath: "vote_average") as! NSNumber as NSNumber
movieDetailViewController.movieOverview = movieDetails.value(forKeyPath: "overview") as? String
}
MovieDetailVC (sends data to tableViewCell)
var newMovies: [NSDictionary] = []
@IBOutlet var detailView: UIView!
@IBOutlet weak var posterView: UIImageView!
@IBOutlet weak var coverView: UIImageView!
@IBOutlet weak var titleLabel: UILabel!
@IBOutlet weak var releaseDateLabel: UILabel!
@IBOutlet weak var overviewLabel: UILabel!
@IBOutlet weak var ratingLabel: UILabel!
var posterUrl: String!
var coverUrl: String!
var movieTitle: String!
var movieReleaseDate: String!
var movieOverview: String!
var movieRating: NSNumber!
...
attempts to send var movieTitle defined above to libraryTableViewCell (libMovieTitle)
// destination should be LibraryViewController ??
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let LibraryTableViewCell = segue.destination as! LibraryMovieTableViewCell
LibraryTableViewCell.libMovieTitle = movieTitle
}
TableViewCell(attempts to send data to final ViewController)
class LibraryMovieTableViewCell: UITableViewCell {
@IBOutlet weak var cellTitleLabel: UILabel!
var libMovieTitle: String?
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let LibraryMovieViewcontroller = segue.destination as! LibraryMovieViewController
LibraryMovieViewController.libraryTitle = cellTitleLabel
}
}
LibraryViewController (attempts to display sent data in table)
class LibraryMovieViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
var libraryMovies: [NSDictionary] = []
let libraryTitle: String?
override func viewDidLoad() {
super.viewDidLoad()
tableView.dataSource = self
tableView.delegate = self
// Do any additional setup after loading the view.
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return libraryMovies.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let libraryCell = tableView.dequeueReusableCell(withIdentifier: "libCell", for: indexPath) as! LibraryMovieTableViewCell
libraryCell.textLabel!.text = libraryTitle
return libraryCell
}
}
At Present I receive an error:
Instance member 'libraryTitle' cannot be used on type 'LibraryMovieViewController'
at:
LibraryMovieViewController.libraryTitle = cellTitleLabel