2015-10-19 3 views
0

Я пытаюсь выбрать первую строку в UITableViewController после ее появления (через segue).Выбор первой строки в UITableViewController в Swift

Я использую следующий код, который я унаследовал от моего предыдущего Цель проекта C:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    { 
     let customCell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! IGANavlistTableCustomViewCell 

     // Code that sets the custom view cell 

     // Then... 
     // Selecting the first row by default 
     if(indexPath.row == 0) 
     { 
      let rowToSelect:NSIndexPath = NSIndexPath(forRow: 0, inSection: 0) 

      tableView.selectRowAtIndexPath(rowToSelect, animated: true, scrollPosition: UITableViewScrollPosition.None) 

      tableView.delegate?.tableView!(tableView, didSelectRowAtIndexPath: rowToSelect) 
     } 

     return customCell; 
    } 

Я получаю следующее сообщение об ошибке:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[IGANavlistTableVC tableView:didSelectRowAtIndexPath:]: unrecognized selector sent to instance 0x79e21040' 

Я был бы признателен, если кто-то может помочь.

Спасибо!

EDIT:

Это мой метод didDeselectRowAtIndexPath:

var navaidSelected = [String]() 
var listOfNavPoints = [[String]]() 

override func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) 
    { 
     // The selected object of the Array with all navaids data (i.e., the selected navaid) is converted to a string 
     self.navaidSelected = self.listOfNavPoints[indexPath.row] 
    } 
+0

Вы используете раскадровку? Правильно ли все подключено? –

+0

Ошибка указывает на didSelectRowAtIndexPath. Можете ли вы показать код для этого? –

ответ

4

Вы забыли реализовать func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) метод.

И вам не нужно использовать delegate когда вызов didSelectRowAtIndexPath:

if(indexPath.row == 0) 
     { 
      let rowToSelect:NSIndexPath = NSIndexPath(forRow: 0, inSection: 0) 

      tableView.selectRowAtIndexPath(rowToSelect, animated: true, scrollPosition: UITableViewScrollPosition.None) 

      self.tableView(tableView, didSelectRowAtIndexPath: rowToSelect) 
     } 

=== EDITED ===

Измените свой didDeselectRowAtIndexPath на didSelectRowAtIndexPath.

+1

Спасибо. Извините, я не включил его в исходное сообщение. Исправленный. Кроме того, если у вас есть такой способ, я получаю следующую ошибку: «Невозможно вызвать значение нефункционного типа« UITableView ». –

+0

Спасибо. Изменено. Ошибка компиляции, но все-таки ошибка времени выполнения. Интересно, что если я выберу вторую строку, а затем первую строку и выберем ее, ошибки не произойдет. –

+0

Взволнованный вопрос об этом здесь: http: //stackoverflow.com/questions/2106292/uitableview-didselectrowatindexpath-not-being-called-on-first-tap – t4nhpt

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