数据不会传回上一个tableview控制器

时间:2016-08-27 01:48:08

标签: swift uitableview xcode7.3

尝试在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)

2 个答案:

答案 0 :(得分:0)

如果您检查delegate不是nil(例如,通过设置断点),您的代码就不会提及。

更新UITableViewCell时的最佳选择是通过数据源方法执行此操作:

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

因此,在您的情况下,让passdata使用新值sort更新数据源,然后调用tableView.reloadData()重新加载单元格。

答案 1 :(得分:0)

您必须分配代理人。如果你有一个“后退”按钮,我会假设你正在使用导航控制器。使用它,我们得到第一个viewController的引用。因此,SortByTable中的viewDidLoad()将如下所示:

override func viewDidLoad() {
    super.viewDidLoad()

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

    tableView.delegate = self
}