2015-04-15 2 views
1

Этот код читается из json-файла и возвращает значение «name» во всех ячейках, это нормально работает, но когда я выбираю значение, которое он продолжает возвращать, я хочу получить стоимость. Я пробовал другие решения в других вопросах, потому что они находятся в Objective C, и это быстро, я пробовал, хотя и не работал вообще. Все, что мне нужно - это значение внутри ячейки. Также я хочу передать значение «id», а это данные [«id»] выбранной ячейки, это возможно.Столбец таблицы возвращает нуль при выборе в swift

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

    let data = datas[indexPath.row] 

    if let captionLabel = cell.viewWithTag(100) as? UILabel { 
     if let caption = data["name"].string{ 
      captionLabel.text = caption 
     } 
    } 

    return cell 
} 

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

    let indexPath = self.tableView.indexPathForSelectedRow(); 

    let currentCell = self.tableView.cellForRowAtIndexPath(indexPath!) as UITableViewCell!; 

    println(currentCell.textLabel!.text) 
    self.viewofloc.hidden = true 
} 
+0

Похоже, что вид с тегом 100 не совпадает с 'textLabel'. – dasdom

+1

Я бы использовал тег 1000 и выше, так как теги ниже, которые могут использоваться яблоком, не зная его также в вашем методе didSelect, который у вас уже есть выбранный 'indexPath', переданный в метод, поэтому просто используйте его для получения' UITableViewCell' – darren102

+0

@dasdom text label имеет тег 100 – MasterWizard

ответ

2

Метод tableView: didSelectRowAtIndexPath: предоставляет путь указателя для выбранной ячейки. Нет необходимости пересчитывать его с помощью self.tableView.indexPathForSelectedRow.

Попробуйте изменить tableView:didSelectRowAtIndexPath: с этим:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     let currentCell = self.tableView.cellForRowAtIndexPath(indexPath) as UITableViewCell!; 
    } 

Я попытался это с новым проектом Xcode (Master-Detail Application) и получил клетку.

+0

Я удалил let indexPath = self.tableView.indexPathForSelectedRow(); , и я все еще получаю нуль – MasterWizard

+0

Получили ли вы ноль для переменной currentCell или другого объекта? –

+0

переменная currentCell – MasterWizard

1

Избавьтесь от тегов и просто создайте простой подкласс UITableViewCell, а затем напрямую войдите в UILabel. Вы увидите, что расширение вашей ячейки станет громоздким, используя теги.

Кроме того, ваш indexPath уже поставляется в didSelectRowAtIndexPath, поэтому захватите ячейку, используя прилагаемые tableView и indexPath.

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

    let data = datas[indexPath.row] 

    if let caption = data["name"] as? String { 
     cell.labelCaption.text = caption 
    } 

    return cell! 
} 

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    let currentCell = tableView.cellForRowAtIndexPath(indexPath) as! ImageCell; 

    println(currentCell.textLabel!.text) 
    self.viewofloc.hidden = true 
} 

class ImageCell: UITableViewCell { 
    @IBOutlet weak var labelCaption: UILabel! 
} 
+0

Я получаю «ячейка изображения не имеет члена с именем labelCaption» – MasterWizard

+0

Вы установили класс в ImageCell в инспекторе идентификации вашей ячейки в раскадровке и связались в розетке? –

+0

личный инспектор дает мне незаконную ошибку конфигурации. – MasterWizard