2014-08-28 3 views
6

Я пытаюсь сделать приложение для iOS 8, используя swift. Цель здесь - сделать своего рода ленту новостей. Этот фид отображает сообщения от пользователей, которые следуют определенной схеме.Доступ к различным представлениям внутри UITableViewCell по тегу в Swift

Я думал об использовании UITableView, где каждая ячейка следует за пользовательским макетом. Проблема возникает, когда я пытаюсь получить доступ к текстовой метке внутри нее. Я пытаюсь получить к нему доступ по его тегу, но когда я это делаю, происходит сбой всего приложения. Ошибка сообщается в "Swift dynamic cast failed", и я использую следующий код для доступа к представлению:

override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! { 

    let cellId: String = "cell" 

    var cell : UITableViewCell = tableView.dequeueReusableCellWithIdentifier(cellId) as UITableViewCell 

    if let ip = indexPath{ 
     cell.textLabel.text = myData[ip.row] as String 
     var lbl = cell.contentView.viewWithTag(0) as UILabel 
     lbl.text = "ola" 
    } 

    return cell 
} 

я делаю что-то не так? Заранее спасибо!

+0

Я не могу увидеть код, где вы на самом деле установки метки. – avismara

+0

Я уже пытался использовать другие значения для тегов, но все равно происходит то же самое. – pavlag

+0

@Avismara Я делаю это в построителе интерфейса ... Я делаю это неправильно? – pavlag

ответ

8

Я думаю, что проблема - это тег 0. Все представления указаны по умолчанию 0. Поэтому попробуйте другое значение тега.

+0

Я уже это пробовал. то же самое происходит. – pavlag

+0

i, которая является проблемой: var lbl = cell.contentView.viewWithTag (0) как UILabel? Вы установили правильный тег в IB? – derdida

+0

да, я. это странно – pavlag

2

Только что столкнулся с той же проблемой. Решение заключалось в изменении тега на 10 и 20. Я использовал 1 и 2 раньше. Кто-нибудь знает о диапазоне тегов, которые используются системой?

Так что мой «cellForRowAtIndexPath» за столом с изображением и меткой на ряд будет выглядеть так:

internal func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    if let cell = tableView.dequeueReusableCellWithIdentifier("cellIdentifier") as? UITableViewCell { 
     (cell.contentView.viewWithTag(10) as UIImageView).image = IMAGES[indexPath.row] 
     (cell.contentView.viewWithTag(20) as UILabel).text = LABELS[indexPath.row] 

     return cell 
    } else { 
     NSLog("Prototype did not work") 
     return UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "errorIdentifier") 
    } 
} 
+0

Да, такая же проблема возникла здесь. – Abhijit

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