Почему я не могу выбрать ячейки TableView?
Это поток моего приложения:
Во-первых, TableView установлен в скрытое. В центре экрана есть UITextField. Когда пользователь вводит что-то и удаляет Go, этот код запускается:
self.view.layoutIfNeeded()
UIView.animateWithDuration(0.5, animations: {
self.textFieldConstraint.constant = -230
self.tableView.hidden = false
self.goButton.hidden = true
self.view.layoutIfNeeded()
}, completion: nil)
На данный момент табличное представление заполнено. Когда строка выбрана, мне нужно манипулировать данными, которые ее заполняют.
Однако абсолютно ничего не происходит, когда я нажимаю на ячейку.
Что я делаю не так?
Мой код TableView находится здесь:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: SearchResultsTableViewCell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! SearchResultsTableViewCell
cell.label.text = searchResultsNames[indexPath.row]
return cell
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return searchResultsUrls.count
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
print("HELLO")
}
И я правильно установил dataSource и делегировал.
Я также хочу уточнить, что tableView заполняет и прокручивает правильно; он просто ничего не сделает, когда я нажимаю на ячейку.
Обновить:
Я обнаружил, что по какой-то причине я могу выбрать ячейки, когда я нажимаю и удерживаю их. Это не то, что я хочу, так кто-нибудь знает, как это исправить?
Ответы
Ответ 1
Я только что использовал ваш код для создания простой таблицы, выбор работает нормально и выходит из системы HELLO, как и ожидалось. Можете ли вы проверить значения выбора в инспекторе атрибутов? Вот мой, который имеет выделение для одиночного выбора.
И вот код, который я использовал для моей простой таблицы
import UIKit
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
var searchResults = [String]()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
searchResults.append("Testing 1")
searchResults.append("Testing 2")
searchResults.append("Testing 3")
searchResults.append("Testing 4")
searchResults.append("Testing 5")
tableView.dataSource = self
tableView.delegate = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("tableCell", forIndexPath: indexPath)
cell.textLabel?.text = searchResults[indexPath.row]
return cell
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return searchResults.count
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
print("HELLO")
}
}
Я также попытался скрыть и показать tableView, который не имел никакого значения при выборе.
РЕДАКТИРОВАНИЕ И РЕШЕНИЕ:
В комментариях ниже мы обнаружили, что проблема связана с tapGestureRecogniser в представлении. Это было определено операцией, позволяющей делать выбор, удерживая нажатие на ячейке. Жест должен провалиться до того, как выбор может быть сделан, оператору удалось решить проблему, обратившись к этому другому SO Ответ
Ответ 2
если вы используете жест "tap", вы не можете выбрать ячейку таблицы. (но если вы нажмете и перетащите вправо ячейку, вы можете выбрать ее.)
Сначала проверьте жест.
И если ваш код имеет self.tableView.allowsSelection = false
, замените false на true или удалите эту строку.
Ответ 3
Моя проблема была вызвана признаком распознавания жестов на самом контроллере представления (у меня был BaseTableViewController, от которого я распространялся). Вероятно, это мешало распознавателям жестов UITableView.
Ответ 4
Для меня я реализовал другой метод select row, поэтому я его удалил и набрал "didSelect..." и выбрал первый из предложенных методов, что и для быстрого 3:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("Row #: \(indexPath)")
}
Ответ 5
В вашем viewDidLoad
или везде, где вы настроили свое представление, убедитесь, что ваш просмотр таблицы даже позволяет выбирать. Это можно контролировать с allowSelection
свойства allowSelection
.
Что-то вроде:
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.allowsSelection = true
}
Ответ 6
Если у вас есть распознаватель жестов, просто введите gestureRecognizer.cancel
Ответ 7
Я встретил ту же проблему, что и вы, и решил ее, удалив приведенный ниже код
self.view.layoutIfNeeded()
можешь попробовать.