2016-07-26 3 views
-1

Я только начинаю с Swift и xCode и в настоящее время обходится с UITableView, мне не удается просто написать «тест» в таблицу.UITableViewController показывает только горизонтальные линии

Я создал UITableViewController в раскадровке, указанное пользовательский класс для него (моего скор файл ниже), заполненный «ClientCell» в качестве повторного использования идентификатора ячейки и код выглядит следующим образом:

class TableViewController: UITableViewController { 


    @IBOutlet var clientTable: UITableView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     clientTable.dataSource = self.dataSource; 
     clientTable.delegate = self; 
    } 

    func numberOfRowsInSection(tableView: UITableView) -> Int { 
     return 1 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier("ClientCell", forIndexPath: indexPath) as! CustomTableViewCell 
     cell.tableLabel.text = "test" 

     return cell 
    } 
} 

В раскадровке я добавил в ячейку прототипа «UILabel» и создал для него «tableLabel», который был создан в CustomTableViewCell.swift. Я смущен всеми вещами, которые я должен учитывать при выполнении чего-то простого. Когда я запускаю его, симулятор просто показывает таблицу с большим количеством горизонтальных линий, но нигде она не говорит «тест».

+0

Вы пишете свои методы источника данных в виде таблицы в своем переопределении viewDidLoad(). Там никогда не будет работать. Переместите numberOfRowsInSection и cellForRowAtIndexPath в расширение класса и объявите их вне любых других тел функции. – Dare

+0

@Dare С расширением класса вы имеете в виду прямо перед viewDidLoad()? – ffritz

+0

Нет, это то, что я имею в виду. https://github.com/raywenderlich/swift-style-guide#protocol-conformance – Dare

ответ

1

Вы не использовали метод numberOfRowsInSection ..... Кроме того, вам также необходимо установить источник данных и делегат представления таблицы как класс, в котором вы пишете эти методы (в случае, если вы этого не сделали).

+0

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

+0

Они есть, если вы не установили их иначе. Также возможно, что автоматическая компоновка вашей ячейки прототипа неверна, поэтому текст не отображается. –

+0

Вы также можете попробовать взглянуть на представления, сделанные в приложении. При запуске приложения в симуляторе вы можете отлаживать иерархию представления и определять, производится ли ячейка. Если это так, вы должны взглянуть на свои ограничения. – Rikh

0

Как минимум вам это нужно:

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return 1 // this should really be from your data source 
} 

Если вы создаете подкласс UITableViewController в Xcode шаблон будет иметь закомментированные версии всех методов, которые вы, скорее всего, хотите, чтобы заполнить.

+0

Это уже не последний метод в моем коде выше? Я получаю сообщение об ошибке. – ffritz

+0

@FelixF. Нет, это не последний метод. Последний способ заключается в том, как вы настраиваете каждую ячейку при ее загрузке. numberOfRowsInSection вернет количество ячеек в вашей таблице. Без этого вы увидите 0 ячеек –