Передача данных в UITableView - PullRequest
       32

Передача данных в UITableView

0 голосов
/ 10 апреля 2020

Я новичок в swift и экспериментирую с передачей данных между контроллерами представления. Я пытался передать данные из контроллера представления в UITableViewCell, однако после запуска мой код не действует.

DetailViewController (передает данные в библиотекуViewController)

 func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        let DestViewController: LibraryMovieViewController = segue.destination as! LibraryMovieViewController

        DestViewController.movieTitle = movieTitle
        DestViewController.movieRelease = movieReleaseDate

    }
}

UITableViewCell

class MovieSearchTableViewCell: UITableViewCell {

    @IBOutlet weak var titleLabel: UILabel!
    @IBOutlet weak var posterView: UIImageView!
    @IBOutlet weak var overviewLabel: UILabel!

}

LibraryViewController

struct libMovie {
    //let mainImage: UIImage
    let title: String
    let release: String

}
class LibraryMovieViewController: UIViewController {

    @IBOutlet weak var tableView: UITableView!

    var dataSource: [libMovie] = []
    var movieTitle: String!
    var movieRelease: String!

     override func viewDidLoad() {
         super.viewDidLoad()
        tableView.dataSource = self
        tableView.delegate = self

     // Do any additional setup after loading the view.
        loadDataSource()
    }
    func loadDataSource(){
       // dataSource.append(libMovie(title: " \(movieTitle)", release: " \(movieRelease)"))
    }
}
extension LibraryMovieViewController: UITableViewDataSource, UITableViewDelegate{

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 115
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return dataSource.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) ->  UITableViewCell {

        guard let movieCell = tableView.dequeueReusableCell(withIdentifier: "libCell", for: indexPath) as? LibraryMovieTableViewCell else {
            return UITableViewCell()
        }
        let libMovie = dataSource[indexPath.row]

        movieCell.cellTitleLabel.text =  "Movie Title: \(movieTitle)"
        movieCell.cellReleaseLabel.text = "Release Date: \(movieRelease)"
        return movieCell
    }
}

Я ожидаю, что при запуске приложения будут переданы movieTitle и movieReleaseDate из контроллера подробного представления и ввода в ячейку таблицы библиотеки, это инициируется нажатием кнопки на контроллере подробного представления.

Однако это, похоже, не влияет на программу или просто возвращает пустые ячейки. В консоли не сообщается ни об ошибках, ни app cra sh

Ответы [ 3 ]

0 голосов
/ 10 апреля 2020

Источник данных в контроллере представления назначения пуст, что вы ожидаете?

Раскомментируйте строку в loadDataSource и перезагрузите табличное представление.

func loadDataSource(){
    dataSource.append(ibMovie(title: movieTitle, release: movieRelease))
    tableView.reloadData()
}

И замените

movieCell.cellTitleLabel.text =  "Movie Title: \(movieTitle)"
movieCell.cellReleaseLabel.text = "Release Date: \(movieRelease)"

с

movieCell.cellTitleLabel.text =  "Movie Title: \(libMovie.title)"
movieCell.cellReleaseLabel.text = "Release Date: \(libMovie.release)"
0 голосов
/ 10 апреля 2020

В prepareForSegue вы передали данные movieTitle и movieRelease, в то время как вы используете dataSource для раздувания данных в tableView.

Либо передайте и объект [libMovie] в DestViewController.dataSource, если вы хотите раздувать несколько строк разных фильмов, либо верните 1 в numberOfRowsInSection и передайте установку содержимого метки в ячейке с movieTitle и movieRelease.

0 голосов
/ 10 апреля 2020

В вашем коде numberOfRowsInSection возвращает dataSource.count, но, похоже, не передает эти данные этому контроллеру представления.

Вы можете либо жестко закодировать numberOfRowsInSection как 1, либо передать dataSource из первого контроллера просмотра и обновите ваш метод cellForRowAtIndexPath.

...