TableViewController обнаруживает кран строки со статическими ячейками


Я использую TableViewController, который имеет таблицу с 2 секциями статических ячеек. Это встроено в контроллер вида. Я не могу получить didSelectRowAtIndexPath для запуска, когда я касаюсь ячеек. Я уже проверил всех обычных подозреваемых из этого вопроса, а также этого. Когда я пытаюсь с табличным представлением внутри viewcontroller с динамической таблицей, я могу заставить его работать просто отлично. Есть ли проблема с использованием TableViewController со статическими ячейками, которые не будут разрешить использование didSelectRowAtIndexPath?

Вот что у меня есть в пользовательском классе для TableViewController:

import UIKit

class OptionTableViewController: UITableViewController {


@IBOutlet var optionsTable: UITableView!


let numberOfRows = [7,2]

let cellIdentifier = "OptionCells"

override func viewDidLoad() {
    super.viewDidLoad()

    self.optionsTable.delegate = self
    self.optionsTable.dataSource = self

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

override func numberOfSections(in tableView: UITableView) -> Int {
    // #warning Incomplete implementation, return the number of sections
    return 2
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete implementation, return the number of rows
    var rows = 0

    if(section < numberOfRows.count){
        rows = numberOfRows[section]
    }

    return rows

}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath){
    print("You selected cell #(indexPath.row)!")

}
}

Обновление: Я попытался заменить tableviewcontroller и viewcontroller, в который он был встроен, но мне все еще не удается запустить didSelectRowAtIndexPath.

Обновление 2: Кто-нибудь знает, возможно ли это в Swift 3? Я нашел рабочий пример использования Swift 2.2 с tableviewcontroller и статическими ячейками здесь. Может быть есть ошибка, делающая это с Swift 3?

2 7

2 ответа:

Вау, так получается, что didSelectRowAtIndexPath больше не корректен в Swift 3. Правильное использование теперь didSelectRowAt. Я нигде не видел этого упоминания, кромеэтого вопроса, на который я наткнулся.

Это:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    print("You selected cell #\(indexPath.row)!")
}

Не Это :

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath){
    print("You selected cell #\(indexPath.row)!")
}

Возможно, у вас неправильно настроено представление таблицы. Обычно UITableViewController имеет свой tableView в свойстве view, и вам не нужно настраивать источник данных и делегировать его программно.