2015-12-01 3 views
0

Я добавил TableView в свой контроллер и создал пользовательский UITableViewCell. Позже я пытался запустить этот код:Почему cellForRowAtIndex не запускается вообще?

func tableView(educationTableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> educationCell { 
    let cell:educationCell = educationTableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! educationCell 

    print("TableView runs") 

    return cell 
} 

, но я не получаю мою печать в журналах TableView runs. Я не понимаю, что происходит и почему оно не запускается. Кто знает, почему эта проблема возникает?

Я читал другие ответы на SO, но никто не помогает =/

+1

ли вы установили 'свойство dataSource' вид таблицы, чтобы указать на ваш контроллер представления? –

+0

Да, конечно, я сделал @NicolasMiari –

+3

Может быть метод numberOfrows возвращает 0. –

ответ

1

Просто убедитесь, что вы ввели правильную DataSource и делегат для контроллера, количество строк больше, то 0

import UIKit 

class MyViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 

    var items: [String] = ["We", "Heart", "Swift"] 

    @IBOutlet var tableView: UITableView! //hook this to your storyboard tableview 

    // MARK: - Controller life cycle stack 
    override func viewDidLoad() { 
     super.viewDidLoad() 

     //confirm table's delegate and data source programmatically 
     tableView.delegate = self; 
     tableView.dataSource = self; 

    } 

    //table view delegate and data source methods 
    func tableView(tableView:UITableView, numberOfRowsInSection section:Int) -> Int 
    { 
     //number of rows must be greater then 0 to get called "CellForRowAtIndex" 
     return self.items.count; 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    { 
     let cell = tableView.dequeueReusableCellWithIdentifier("cell") as! CraditCardCell 
     return cell 
    } 

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 
    { 
     print("You selected cell"); 
    } 
} 
+1

Я думаю, что если бы он этого не сделал, компилятор не позволил бы ему установить свойство 'dataSource'' self' (view controller). –

+0

... Хотя я не уверен, что он все еще может подключить его через Interface Builder без ошибок –

+0

@NicolasMiari согласен, я обновил свой ответ, чтобы сделать его более понятным – swiftBoy

0

Одна из причин может заключаться в том, что вы изменили тип возврата на educationCell, instdead стандартного UITableViewCell. Попробуйте изменить это.

+0

В этом случае приведение в действие не получится, и приложение будет разбиваться, не так ли? –

+0

Спасибо, что указал. Я использовал некоторые роли в некоторых приложениях, но я не помню, чтобы изменить тип возвращаемой функции. У меня нет моего кода передо мной, но я проверю позже. – Vale

+0

Как правило, вы деактивируете свои ячейки определенным идентификатором, связанным с подклассом 'UITableViewCell' (либо путем установки идентификатора в Storyboard, либо путем программного программирования методов« register ... »). Итак, сразу после dequeuing вы принудительно применяете соответствующий подкласс (потому что он должен быть безопасным). –

3

необходимо возвращаемое значение numberOfRowsInSection больше, чем 0

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