2016-02-15 3 views
0
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

     let storyboard = UIStoryboard(name: "FilteringPageSelection", bundle: nil) 
     controller = storyboard.instantiateViewControllerWithIdentifier("FilteringPageSelectionController") as! FilteringPageSelectionTableViewController 
     controller.filteringType = filterTitle[indexPath.row]; 
     controller.selectedValue = selectedValue; 

     controller.title = "Selection" 
     self.navigationController?.pushViewController(controller, animated: true) 

     tableView.deselectRowAtIndexPath(indexPath, animated: true) 
    } 

Выше мой код, это мой код контроллера табличного вида, я намерен нажать на другой контроллер представления, щелкнув по нему ячейку. Внутри нового контроллера для меня есть несколько значений. однако после того, как я выберет новое значение от нового контроллера, я вернусь к исходной сцене таблицы и получаю выбранное значение от нового контроллера и назначу в переменную selectedValue. Ниже мой код разматывания.Как повторно инициализировать функцию переопределения таблицы?

@IBAction func unwindToFilteringVC(segue:UIStoryboardSegue) { 
    selectedValue = controller.selectedValue 
} 

Однако, когда я снова нажмите на ячейку, так как функция TableView переопределение инициализации только в первый раз, когда TableView загружен, поэтому, когда я изменить значение SelectedValue, то controller.selectedValue по-прежнему остаются старое значение и нажмите на новый контроллер.

Как изменить значение параметра controller.selectedValue?

+0

Не могли бы вы объяснить на более высоком уровне пользовательского интерфейса то, что вы действительно пытаетесь достичь? – matt

+0

Когда вы вызываете unind segue, вам необходимо перезагрузить весь контроллер табличного представления, чтобы обновлять данные в строках. – cmashinho

+0

положить tableview.reloadData() на вашем методе viewWillAppear –

ответ

0

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) - эта функция вызывается каждый раз, когда вы нажимаете на ячейку, а не один раз. Поэтому всякий раз, когда вы выбираете ячейку, ваш код создает экземпляр контроллера просмотра фильтра и устанавливает его selectedValue в текущий selectedValue контроллера табличного представления (если только это не глобальная переменная). Возможно, это не то, что вы хотите.

ИЛИ

Вы можете смешали который selectedValue который. Вы должны переименовать его.

+0

Я понял, что у моего кода есть проблема, а не инициализация только один раз, спасибо за помощь –

0

Я думаю, что вам нужно использовать шаблон делегата, чтобы информировать контроллер табличного представления выбранного значения в контроллере представления выбора, вместо того, чтобы держать ссылку на него. Сначала нужно определить протокол:

protocol SelectionViewControllerDelegate: class { 
    func selectionViewController(controller: SelectionViewController, didSelectValue value: ValueType) 
} 

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

class SelectionViewController: UIViewController { 
    weak var delegate: SelectionViewControllerDelegate? 

    func handleChange() { 
    delegate?.selectionViewController(self, didSelectValue: selectedValue) 
    } 
} 

Затем вы делаете ваш контроллер представления таблицы соответствует этому протоколу, как так:

class TableViewController: UITableViewController, SelectionViewControllerDelegate { 

    func selectionViewController(controller: SelectionViewController, didSelectValue value: ValueType) { 
    self.selectedValue = value 
    } 

} 

Не забудьте установить контроллер представления таблицы в качестве делегата от контроллера представления выбора в методе didSelectRowAtIndexPath говоря:

controller.delegate = self 

Перед тем, как вы назовете метод навигацииController ?.pushViewController.

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