2017-01-18 2 views
0

Я новичок в Swift и разработке iOS в целом. Я пытаюсь создать пользовательский UITableViewCell. Я создал ячейку в моей главной раскадровки поверх UITableView, которая находится внутри UIViewController. Когда я загрузил одну из ячеек по умолчанию, я смог заполнить ее данными. Однако теперь, когда я использую пользовательскую ячейку, я не могу получить какие-либо данные в таблице. Я просмотрел всевозможные учебники и вопросы, размещенные в Интернете, но я не могу понять, почему он не работает. Любая помощь будет оценена по достоинству.Swift Custom UITableViewCell не отображает данные из массива

Вот мой код UIViewController, что TableView находится в

import UIKit 

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 

@IBOutlet var tableView: UITableView! 
var name = ["Thinh", "Nhut", "Truong", "Tuyet", "Hoai", "Hoang", "NSHipster", "iOS Developer Tips", "Jameson Quave", "Natasha The Robot", "Coding Explorer", "That Thing In Swift", "Andrew Bancroft", "iAchieved.it", "Airspeed Velocity"] 
var ngaysinh = ["10/10/1991", "10/10/1991", "10/10/1991", "10/10/1991", "10/10/1991", "10/10/1991", "10/10/1991", "10/10/1991", "10/10/1991", "10/10/1991", "10/10/1991", "10/10/1991", "10/10/1991", "10/10/1991", "10/10/1991"] 
var namsinh = ["1991", "1991", "1991", "1991", "1991", "1991", "1991", "1991", "1991", "1991", "1991", "1991", "1991", "1991", "1991"] 


override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

} 

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

public func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return name.count 
} 

// Row display. Implementers should *always* try to reuse cells by setting each cell's reuseIdentifier and querying for available reusable cells with dequeueReusableCellWithIdentifier: 
// Cell gets various attributes set automatically based on table (separators) and data source (accessory views, editing controls) 


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

    cell.hoten.text = name [indexPath.row] 
    cell.ngaysinh.text = ngaysinh [indexPath.row] 
    cell.namsinh.text = namsinh [indexPath.row] 

    return cell 
} 

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    tableView.deselectRowAtIndexPath(indexPath, animated: true) 

    let row = indexPath.row 
    print(name[row]) 
    print(ngaysinh[row]) 
    print(namsinh[row]) 
} 


} 

И это CustomCell Класс:.

import UIKit 

class CustomCell: UITableViewCell { 

@IBOutlet weak var hoten: UILabel! 
@IBOutlet weak var ngaysinh: UILabel! 
@IBOutlet weak var namsinh: UILabel! 
override func awakeFromNib() { 
    super.awakeFromNib() 
    // Initialization code 
} 

override func setSelected(selected: Bool, animated: Bool) { 
    super.setSelected(selected, animated: animated) 

    // Configure the view for the selected state 
} 

}

+0

Можете ли вы поделиться кодом для CustomCell? –

+1

В раскадровке проверьте, что делегат 'tableView' и dataSource подключены к ViewController. –

+0

Я проверяю ссылку oulet, подключается к viewcontroller, но источник данных и делегат не имеют ничего. Это верно? – ThinhLe

ответ

0

сделайте следующее:

  1. Проверьте опечатку для клеток и именем класса
  2. Проверьте делегат и источник данных о UITableView правильно переплетены или нет
  3. Если с помощью XIB для TableViewCell затем зарегистрировать XIB в VDL

Примечание: 1. Сделайте пространство между as и customCell вот так as! CustomCell. И это лучше для iOS, если вы объявите переменную ячейку следующим образом: let cell : CustomCell = .........., потому что в этом случае x-code знает ваш тип переменной. [Иногда бывает, что они не создают конфликтов, но не в хорошей практике кодирования].

2. Возможно, измените название своей настольной розетки @IBOutlet var tableView: UITableView! на любое другое имя, так как tableView уже находится в имени сборки, сделанной iOs, если вы используете одну и ту же переменную, затем переопределяет и вызывает конфликт для x-кода.

редактировать

Вместо self.tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as!CustomCell удалить себя из линии потому, что ваш не ваш tableView освобождения пакета из очереди объекта, здесь нужен просто ваш параметра из очереди методы cellForRow.

Использование ниже код:

let cell : CustomCell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! CustomCell 

Решение

Используйте это демонстрационное изображение, чтобы связать ваш delegates и datasource от storyboard, я добавил вывод после того, как сделать это, проверьте.

Demo Image

enter image description here

Выход из проекта:

enter image description here

+0

1. Я проверил, и это абсолютно правильно. 2. когда я добавляю tableView.delegate = само tableView.dataSource = само Это дает мне ошибки 3. меняю эта линия пусть ячеечная: CustomCell = tableView.dequeueReusableCellWithIdentifier ("клетка", forIndexPath: indexPath) как! CustomCell, но ничего не происходит – ThinhLe

+0

@ThinhLe Редактировал часть моего ответа. –

+0

Я пробую всю вашу идею, но все равно не могу это исправить. – ThinhLe

0

Я думаю, пожалуйста, напишите это в вашем viewDidLoad и попробуйте,

override func viewDidLoad() { 
    super.viewDidLoad() 

    tableView.delegate = self 
    tableView.dataSource = self 
    // Do any additional setup after loading the view. 
} 
+0

После того, как я это сделал, он покажет ошибку. Затем я осматриваю эту проблему. Они сказали, что у меня есть эта строка: let cell = self.tableView.dequeueReusableCellWithIdentifier («cell», forIndexPath: indexPath) as! CustomCell – ThinhLe

+0

Вы можете найти его здесь: http://stackoverflow.com/questions/30338566/swift-custom- uitableviewcell-not-display-data – ThinhLe

+0

@ThinhLe 'as! CustomCell' делает пространство. И это лучше для iOS, если вы объявите переменную ячейку, как эта 'let cell: CustomCell = ..........' –

0

Убедитесь, что вы установили идентификатор ячейки

enter image description here

+0

Да, я установил его, когда создаю таблицу вида таблицы из вида таблицы – ThinhLe

0

У меня тоже была эта проблема, и выше не было пути для меня. То, что мне также нужно было сделать, это убедиться, что у меня есть dataSource и делегировать выходы, подключенные к контроллеру представления (и что класс класса просмотра включен UITableViewDelegate и UITableViewDataSource). Проверьте это, если вышеупомянутое не исправит его для вас.

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

  • Нет связанных вопросов^_^