如何重新初始化表视图覆盖功能?

时间:2016-02-15 17:26:55

标签: ios swift

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。下面是我的unwind segue代码。

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

但是,当我再次单击该单元格时,由于tableview覆盖函数仅在加载tableview时第一次初始化,因此当我更改selectedValue的值时,controller.selectedValue仍然是旧值并且推送进入新的控制器。

如何更改controller.selectedValue的值?

2 个答案:

答案 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

在你调用navigationController?.pushViewController方法之前。

答案 1 :(得分:0)

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) - 每次点击一个单元格时都会调用此函数,而不只是一次。因此,每当您选择一个单元格时,您的代码都会实例化过滤器视图控制器并将其selectedValue设置为表视图控制器的当前selectedValue(除非这是一个全局变量)。也许这不是你想要的。

OR

你可能混合了哪个selectedValue。你应该重命名一个。