У меня возникли проблемы с получением метода didSelectRowAt
для работы TableView
внутри обычного ViewController
. Я уже убедился, что delegate
и data source
для таблицы установлены в коде ViewController
. Этот ViewController
заполняет ячейки tableview
с результатами поискового запроса до API, а рендеринг данных ячеек работает нормально.Не могу получить didSelectRowAt работать в TableView
Это только didSelectRowAt
метод, который не регистрируется. Я попытался вручную добавить ту же информацию делегата на Main.storyboard, но знак +
не вызовет всплывающие окна. Мне интересно, есть ли что-то в Main.storyboard
, которое нуждается в исправлении. Я также добавил изображения инспектора соединений ViewController
и TableView
. Я новичок в разработке iOS и не имею большого опыта работы с графическими интерфейсами для мобильного дизайна, поэтому я предполагаю, что это что-то есть, но, возможно, я ошибаюсь.
Вот основная версия моего кода:
class SearchViewController: UIViewController, UISearchBarDelegate, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
@IBOutlet var searchBar: UISearchBar!
...variable declarations ....
override func viewDidLoad() {
super.viewDidLoad()
self.hideKeyboardWhenTappedAround()
searchResults = []
searchBar.delegate = self
tableView.dataSource = self
tableView.delegate = self
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1;
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return searchResults!.count;
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "searchTableViewCell", for: indexPath) as! SearchTableViewCell
if(searchActive && !(self.searchResults?.isEmpty)!) {
(doing some stuff with search results here...works fine)
}
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("hello!")
}
func searchBar(_ searchBar: UISearchBar,
textDidChange searchText: String) {
print("search text \(searchText)")
getSearchResultJSON(term: searchText) { json in
let data = json as! [Dictionary<String, String>]
self.searchResults = data
}
self.tableView.reloadData()
}
...
}
[]
[]
EDIT: как проверить вменяемость для если асинхронная функция поиска была ничего изменения , Я просто попытался удалить весь код, связанный с поиском, и заполнить таблицу view из жестко заданного массива переменных. Он работал, чтобы отображать фиктивные переменные, но по-прежнему не имеет возможности выбирать ячейку и получать любую реакцию. Я также видел пару упоминаний о том, что у меня ранее была опечатка с didDeSelectRowAt вместо didSelectRow at, которая была исправлена, но поведение такое же.
Это закончилось тем, что был связан с отводом жест, который происходит в расширении hideKeyboardWhenTappedAround(), что я написал
попытаться удалить объявление делегата в методе viewdidload и установить делегат tableview в раскадровке –
HAve вы взяли любую заставку или кнопку над ячейкой таблицы? –
Вы используете метод didDeselectRowAt. – Niharika