Почему я не могу выбрать ячейки 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, как и ожидалось. Можете ли вы проверить значения выбора в инспекторе атрибутов? Вот мой, который имеет выделение для одиночного выбора.

enter image description here

И вот код, который я использовал для моей простой таблицы

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()

можешь попробовать.