2015-10-11 2 views
6

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

Update:

Я обнаружил, что по какой-то причине, я могу выбрать ячейки, когда я нажать и удерживать их. Это не то, что я хочу, так кто-нибудь знает, как это исправить?

+1

Вы реализовали 'didSelectRowAtIndexPath'? – AaoIi

+0

Yup, я пытаюсь напечатать что-то, когда постучал, но я ничего не получаю. – bkwebhero

+0

Вы установили делегата TableView в раскадровке из инспектора соединений? – AaoIi

ответ

11

Я просто использовал свой код, чтобы создать простую таблицу, селекция работает нормально и выход из ПРИВЕТ, как и ожидалось. Можете ли вы проверить значения выбора в инспекторе атрибутов? Вот мой, который имеет выделение для одиночного выбора.

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, который не сделал никакой разницы по выбору.

EDIT & РЕШЕНИЕ:

В комментариях ниже, мы обнаружили, что эта проблема связана с tapGestureRecogniser на представлении, Это был опознан оп только возможность сделать выбор, удерживая кран на ячейке. Жест должен провалиться до того, как выбор может быть сделан, оператору удалось решить проблему, обратившись к этому другому SO Answer

+0

Мой проект соответствует именно этому! Это хорошее предложение, но у меня все еще такая же проблема. ТаблицаView заполняет и прокручивает правильно; он просто ничего не сделает, когда я нажимаю на ячейку. – bkwebhero

+0

Вы пытались запустить «чистый» в своем проекте и перезапустить xcode? Я получаю странную странную ошибку, как это, и иногда это исправляет ее. – Scriptable

+0

Да, несколько раз. Я собираюсь перезагрузить компьютер. Я действительно сомневаюсь, что он все сделает, но я исчерпал все мысли, о которых я могу думать. – bkwebhero

1

В вашем viewDidLoad или везде, где вы настроили свой вид, убедитесь, что ваш вид в таблице даже позволяет выбирать. Это можно контролировать с помощью allowSelection property.

Что-то вроде:

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.tableView.allowsSelection = true 
} 
+1

Это хорошее предложение, однако оно не решает мою проблему! – bkwebhero

1

Моя проблема была вызвана распознающим признаком жесты на самом контроллере представления (у меня был BaseTableViewController I простирается от). Вероятно, это мешало распознавателям жестов UITableView.

3

Если вы используете жест «tap», вы не можете выбрать ячейку таблицы.(но если вы нажмете и перетащите вправо ячейку, вы можете выбрать ее.)

Сначала проверьте жест.

И если ваш код имеет self.tableView.allowsSelection = false, замените false на true или удалите эту строку.

1

Для меня осуществляет другой сделал выбор метода строки, так что я стер и напечатал «didSelect ...» и выбран первый в предложенных методах, который это для быстрых 3:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    print("Row #: \(indexPath)") 
} 
0

я встретил ту же проблему, как вы и решить ее, удалив код, приведенный ниже

self.view.layoutIfNeeded() 

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

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