Строки SWIFT tableView не реагируют на выбор - PullRequest
0 голосов
/ 08 февраля 2019

Немного контекста:

Я заполняю tableView заголовками фильмов

моя таблица

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

class SearchTableViewController: NavigationController{

    @IBOutlet weak var tableView: UITableView!
    var filteredMovies = [Movie]()
    let request = Requests()


    override func viewDidLoad() {
        super.viewDidLoad()
    }

    /*
     searches movies from the db which title corresponds to the given text
    */
    func searchMovie(_ keywords: String) {
        request.searchMovie(keywords: keywords){ response in
            for data in response{
                self.filteredMovies.append(data)
            }
            DispatchQueue.main.sync {
                self.tableView?.reloadData()
            }
        }
    }
}

extension SearchTableViewController : UITableViewDelegate { }

extension SearchTableViewController: UISearchBarDelegate {
    /*
     every time a key gets pressed, the table view gets updateted
     with new movie titles
    */
    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
        self.filteredMovies = [Movie]()
        searchText.isEmpty ? self.tableView?.reloadData() : searchMovie(searchText)
    }
}

extension SearchTableViewController : UITableViewDataSource{

    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return filteredMovies.count
    }

    func tableView(_ tableView: UITableView, didHighlightRowAt indexPath: IndexPath) {
        print("hello from highlight")
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print("hello from selection")
    }

    func tableView(_ tableView: UITableView, didFocusRowAt indexPath: IndexPath) {
        print("hello from focus")
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! SearchTableCell
        cell.onDidSelectMovie = {
            super.goToMovieDetail(movie: self.filteredMovies[indexPath.row])
        }
        let label = cell.contentView.subviews.first as! UILabel
        label.text = filteredMovies[indexPath.row].title
        return cell
    }
}

Как вы можете видеть, я протестировал каждую функцию, которая может показать, что строка была нажата, но ни одна из них не работает.Я также попытался дать ячейкам собственный класс, в котором я переопределяю поведение свойства ячейки «isSelected».

class SearchTableCell: UITableViewCell {

    var onDidSelectMovie:(()->Void)?

    override var isSelected: Bool{
        didSet {
            if isSelected{
                if let cb = onDidSelectMovie{
                    cb()
                }
            }
        }
    }
}

Еще одна вещь, на которую я хочу обратить внимание, которая может помочь, заключается в том, что «Выделение "в ячейке включено, как, например," взаимодействие с пользователем ", но если я попытаюсь изменить выделение с" по умолчанию "на" синий ", цвет не изменится.

У меня буквально закончились идеи, и я испробовал много возможныхрешения, но ни одно из них не сработало.Любое предложение?

Редактировать: я собираюсь добавить все, что может быть полезно

  • делегат tableView - SearchTableViewController

1 Ответ

0 голосов
/ 08 февраля 2019

Похоже, мне просто нужно было удалить и добавить делегата tableView ... не спрашивайте меня почему, я потратил на это 2 дня.В любом случае, спасибо всем, кто пытался помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...