2017-01-06 4 views
2

У меня возникли проблемы с получением метода 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() 
    } 
... 
} 

[Viewcontroller connections inspector]

[TableView Connections Inspector]

EDIT: как проверить вменяемость для если асинхронная функция поиска была ничего изменения , Я просто попытался удалить весь код, связанный с поиском, и заполнить таблицу view из жестко заданного массива переменных. Он работал, чтобы отображать фиктивные переменные, но по-прежнему не имеет возможности выбирать ячейку и получать любую реакцию. Я также видел пару упоминаний о том, что у меня ранее была опечатка с didDeSelectRowAt вместо didSelectRow at, которая была исправлена, но поведение такое же.

Это закончилось тем, что был связан с отводом жест, который происходит в расширении hideKeyboardWhenTappedAround(), что я написал

+0

попытаться удалить объявление делегата в методе viewdidload и установить делегат tableview в раскадровке –

+0

HAve вы взяли любую заставку или кнопку над ячейкой таблицы? –

+2

Вы используете метод didDeselectRowAt. – Niharika

ответ

2

Найденный! Преступником был self.hideKeyboardWhenTappedAround(), который является расширением, которое я написал, чтобы скрыть клавиатуру. Это мешало крану ячейки, потому что оно действительно использовало UITapGestureRecognizer. Спасибо за подсказки всем.

2

Вы используете didDeselectRowAt вместо didSelectRowAt

Редактировать

Ну, используйте этот ниже делегата затем

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { 
    return true 
} 

a nd сделайте ваш контроллер совместимым с UIGestureRecognizerDelegate

+0

Хотел бы я сказать, что это был ответ, потому что это имеет смысл! Но я только что сделал это редактирование, и ячейка все еще не отвечает на выбор – jeanmw

+0

Вы не видите «привет», напечатанную при нажатии на ячейку? – Matt

+0

Нет, нет напечатанного сообщения @Matt – jeanmw

0

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

0

В изображении, которое вы загрузили, делегат и источник данных не подключены к ViewController. Удалите код в viewdidload (tableview.delegate = self) и соедините их в раскадровке.

 Смежные вопросы

  • Нет связанных вопросов^_^