2015-08-23 2 views
4

Я пытаюсь с двух недель с помощью многих учебных пособий получать и выводить данные из ячейки TableView. Но, похоже, это невозможно сделать в XCode. Можно получить только выбранную ячейку ячейки, но я не могу прочитать текстовые метки выбранной ячейки.Получить данные из ячейки с помощью «willSelectRowAtIndexPath» в Swift2

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

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

func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? { 
    row = indexPath.row // here is the row the user has selcted 
    labelStringOfselectedCell = "??????" // how to retrieve data from a label in the cell? 
    return indexPath 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    let DestViewController : ViewControllerDetail = segue.destinationViewController as! ViewControllerDetail 
    DestViewController.seguedData = labelStringOfselectedCell 
} 

ответ

2

Если вы действительно хотите сделать что-то подобное, вы можете сделать что-то вроде:

func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? { 
    let cell = tableView.cellForRowAtIndexPath(indexPath) // do not confuse this with the similarly named `tableView:cellForRowAtIndexPath:` method that you've implemented 
    let string = cell?.textLabel?.text 
    return indexPath 
} 

Очевидно, это зависит от ли вы обычай подкласс клеток и что метка была, но это иллюстрирует Основная идея.

Сказав это, , вы не должны этого делать. Ваше приложение должно следовать следующей парадигме программирования Model-View-Controller (MVC). При определении того, какие данные передаются на следующую сцену, вы должны вернуться к исходной модели, которую вы использовали при первоначальном заполнении таблицы, не ссылаясь на какой-либо элемент управления в таблице.

Например, давайте представим, что вы заселили оригинальную клетку путем извлечения данных из objects модели:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) 
    let object = objects[indexPath.row] 
    cell.textLabel?.text = object.name 
    return cell 
} 

Тогда вы просто реализовать prepareForSegue, который извлекает данные из objects также (и вы не должны реализовать willSelectRowAtIndexPath на всех):

func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if let destination = segue.destinationViewController as? ViewControllerDetail { 
     let object = objects[tableView.indexPathForSelectedRow!.row] 
     destination.seguedData = object.name 
    } 
} 

Очевидно, что это будет меняться в зависимости от того, что ваша модель была и как вы первоначально заселена клетку, но, надеюсь, Illustra Это основная идея.

+0

и только вопрос только @ Rob можно ответить! :/http://stackoverflow.com/questions/32673562 – Fattie

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