2016-08-27 5 views
1

Пытается передать этикетку в выбранной ячейке на TableViewController. Вернитесь к метке в статической ячейке TableViewController, когда я нажму кнопку «Назад». Я получаю правильную метку на didSelectRowAtIndexPath(). но данные не возвращаются, когда я пытаюсь его распечатать. Я пробовал множество сценариев и пришел сюда как последнее средство. любая помощь будет оценена благодарю вас!Данные не возвращаются к предыдущему контроллеру таблицы.

tableviewcontroller один:

class SearchTableViewController: UITableViewController, SortProtocol { 

var sort: String? 

override func viewDidLoad() { 
    super.viewDidLoad(

    SORTBYCELL.detailTextLabel?.text = sort 


} 
    func passdata(sort: String?){ 
    self.sort = (sort) 
    } 

TableViewController Два:

protocol SortProtocol { 
func passdata(sort: String?) 
} 
class SortByTable: UITableViewController { 

var delegate: SortProtocol? 

override func viewDidLoad() { 
    super.viewDidLoad() 

    tableView.delegate = self 
} 

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

    let current = tableView.cellForRowAtIndexPath(indexPath)! as UITableViewCell 

    let sort = current.textLabel!.text! 

    self.delegate?.passdata(sort) 
+0

В VC2, вам нужно получить ссылку на VC1 и назначить его делегатом. Вы используете навигационный контроллер? – Shades

+0

Поместите этот «SORTBYCELL.detailTextLabel? .text = sort» в func passdata (sort: String?) {...}. Поскольку viewDidLoad выполняется только один раз при загрузке представления – KSR

ответ

0

Вы должны назначить делегата. Если у вас есть кнопка «назад», я собираюсь предположить, что вы используете навигационный контроллер. Используя это, мы получаем ссылку на первый viewController. Таким образом, ваш viewDidLoad() в SortByTable будет выглядеть следующим образом:

override func viewDidLoad() { 
    super.viewDidLoad() 

    let searchVC = self.navigationController?.viewControllers[0] as! SearchTableViewController 
    self.delegate = searchVC 

    tableView.delegate = self 
} 
+0

любая идея о том, как я держу галочку для когда пользователь возвращается в «SortByTable»? оцените вашу помощь, которая исправила мою проблему –

+0

@JoeDodge Галочка для ранее выбранной строки? Вам понадобится переменная, которая отслеживает, какая ячейка была выбрана, тогда, когда этот v iewController возвращается на экран, вы проверяете переменную и устанавливаете эту строку на выбранную. – Shades

+0

Да, это ужасно, неплохо это проверить ... начал писать приложения iOS около месяца назад, начиная с создания веб-разработки. я ценю вашу помощь –

0

Ваш код не упоминает, если вы проверили, что delegate не nil (установив точку останова на нем, например).

Лучший вариант при обновлении UITableViewCell в том, чтобы сделать это с помощью метода источника данных:

func tableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 

Таким образом, в вашем случае, сделать источник passdata обновления вы данных с новым значением sort, а затем вызвать tableView.reloadData() для перезагрузки ячейки.

+0

Ячейка ячеек, которую я обновляю, является статической, я просто имею выходы на каждый ярлык ячеек в файле, в то время как ячейки, которые я выбираю из массива, я работал над подготовкой к segue, но я предпочитаю делать это таким образом. Когда я нажимаю на ячейку, он печатает правильную метку просто не передам его –

+0

Я думаю, что использование источника данных - это путь, я не уверен, что установка 'IBOutlet' из класса в ячейку прототипа должна работать. – paulvs