2016-06-15 3 views
3

Я очень новичок в программировании Swift, поэтому не судите меня сильно. Я потратил много времени, пытаясь понять, где проблема, но я не могу ее получить.UILabel не обновляется с помощью пользовательского класса UITableViewCell Swift

У меня есть UITableView внутри UIViewController

UIViewController:

@IBOutlet weak var myTableView: UITableView! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    myTableView.delegate = self 
    myTableView.dataSource = self 
} 



func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    // #warning Incomplete implementation, return the number of sections 
    return 1 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    // #warning Incomplete implementation, return the number of rows 
    return 10 
} 


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

    cell.createNewCell() 
    return cell 
} 

В моем обычае UITableViewCell класс У меня есть myLabel - ярлык, который я прилагается в раскадровке.

@IBOutlet weak var myLabel: UILabel! 
    func createNewCell(){ 
     myLabel.text = "1234567" 
    } 

Но если добавить следующую строку cell.textLabel!.text = "12312" в cellForRowAtIndexPath когда мое обновление клеток, клетка не обновляется, когда я пытаюсь обновить их через пользовательский класс UITableViewCell.

+0

Я отредактировал ваш вопрос, но пока неясно, что вы просите. Ваши последние 2 предложения не ясны – Honey

ответ

0

Вам необходимо перезагрузить tablewView, если вы обновляете данные в ячейке. Если ваш массив источников данных обновлен, и вы хотите заполнить обновленные данные в виде таблицы, просто перегрузите его.

@IBOutlet weak var myTableView: UITableView! 
    var dataSource= [String]() 
    override func viewDidLoad() { 
     super.viewDidLoad() 
    myTableView.delegate = self 
    myTableView.dataSource = self 
    dataSource = ["item1", "item2", "item3"] 
    } 

    func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    // #warning Incomplete implementation, return the number of sections 
    return 1 
    } 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    // #warning Incomplete implementation, return the number of rows 
    return dataSource.count 
    } 


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

     cell.myLabel.text = dataSource[indexPath.row] 
     return cell 
    } 
    //Suppose in some function you changed the datasource 
    func updateData() { 
     dataSource = ["number1", "number2", "number3"] 
    //Now just call 
    myTableView.reloadData() 

} 
+0

нет, проблема в том, что исходные данные не отображаются, мне не нужно перезагружатьData(), чтобы показать исходные данные – Danny

2

Я думаю, что вы должны сделать это так:

1) Создайте пользовательские ячейки

class customCell: UITableViewCell 
{ 
    @IBOutlet weak var myLabel: UILabel! 
} 

2) Установить идентификатор для многократного использования ячейки и в cellForRowAtIndexPath

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
{ 
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! customCell 
    cell.myLabel.text = "1234" 
    return cell 
+0

Нет, как вы можете видеть, MyTableViewCell уже был создан таким образом – Danny

0

Я нашел, где проблема. На самом деле мой UITableView находился внутри UIViewController, который был внутри tabBarController. Вот почему в Xcode 7.3.1 ограничения не применялись во время выполнения.

Я установил его с установкой установленным флажком в true для всех ограничений и для UILabel в ячейке.

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