Немного контекста:
Я заполняю 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