2015-11-22 3 views
1

Так что мой код выглядит следующим образом:как бросить UITableViewCell значение правильно в строку

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath){ 
    let selectedCell = tableView.cellForRowAtIndexPath(indexPath)! as UITableViewCell 
    performSegueWithIdentifier("TVtoVCSegue", sender: selectedCell)   
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "TVtoVCSegue" { 
    let otherViewController = segue.destinationViewController as! TTDetailCntr 
    otherViewController.CurrentClass = String(sender!) as String 
} 

otherViewController.CurrentClass подключен к метке другого ViewController и его метка говорит:

<UITableViewCell: 0x13f692230; frame = (0 132; 320 44); text = '10.d'; clipsToBounds = YES; autoresize = W; layer = <CALayer: 0x13f692600>> 

Это должно быть " 10.d "в этом случае. Как я могу это достичь?

Я посмотрел много вопросов, если вы нашли дубликат, то дайте мне знать, или объяснить, что я делаю неправильно

Спасибо заранее

ответ

1

Вы можете получить доступ к TextLabel из «клетки» UITableViewCell как это:

cell.textLabel?.text 

Итак, вы хотите, чтобы сделать следующие изменения в вашем prepareForSegue функции

if let cell = sender as? UITableViewCell, text = cell.textLabel?.text { 
    otherViewController.CurrentClass = text 
} 
+0

Хотя хранение данных модели в поле зрения ячеек таблицы является плохим дизайном. Лучше извлечь данные из объекта модели и передать это. –

+0

спасибо много !! :) –

+0

@ DuncanC Я не мог согласиться больше, но я думал, что это может быть вне сферы его вопроса. – Peyman

0

Предположительно, у вас есть текст, который вы устанавливаете в виде таблицы в каком-либо массиве. Вы должны записать индекс выбранной ячейки в переменную экземпляра в файле didSelectRowAtIndexPath, а затем использовать ее для извлечения строки для этой записи в вашей таблице в методе prepareForSegue.

Что-то вроде этого:

override func tableView(
    tableView: UITableView, 
    didSelectRowAtIndexPath indexPath: NSIndexPath) 
{ 
    //You would need to create the instance var cellIndex 
    self.cellIndex = indexPath.row 
    let selectedCell = tableView.cellForRowAtIndexPath(indexPath)! as UITableViewCell 
    performSegueWithIdentifier("TVtoVCSegue", sender: selectedCell) 
} 

override func prepareForSegue(segue: UIStoryboardSegue, 
    sender: AnyObject?) 
{ 
    if segue.identifier == "TVtoVCSegue" 
    { 
    //This code assumes that myModel is an array of structs. 
    //Change this code to fit your data model 
    //(should be the same code you use to set the text in the cell.) 
    let stringToPass = myModel[self.cellIndex].stringValue 
    let otherViewController = segue.destinationViewController 
     as! TTDetailCntr 
    otherViewController.CurrentClass = stringToPass 
    } 
} 
+0

Хорошо, этот код работает, но viewController загружается дважды? Я читал, что я не могу реализовать функции didSelectRowAtIndexPath и prepareForSegue, которые я должен реализовать только prepareForSegue и разместить там весь код. Должен ли я задать другой вопрос или вы можете мне помочь? @Duncan –

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