数据不会传递回之前的tableview控制器



当我点击后退按钮时,试图将TableViewController 2上选定单元格上的标签传递给TableViewController 1上静态单元格上的标签。我在didSelectRowAtIndexPath()上得到了正确的标签。但是当我试图打印它时,数据不会传递回来。我试过很多方案,最后不得已才来这里。任何帮助都会很感激,谢谢!

表:

class SearchTableViewController: UITableViewController, SortProtocol {
 var sort: String?
 override func viewDidLoad() {
    super.viewDidLoad(
  SORTBYCELL.detailTextLabel?.text = sort

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

表二:

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)

您必须分配委托。如果你有一个"后退"按钮,我假设你使用的是导航控制器。使用那个,我们获得对第一个viewController的引用。因此,SortByTable中的viewDidLoad()看起来像:

override func viewDidLoad() {
    super.viewDidLoad()
    let searchVC = self.navigationController?.viewControllers[0] as! SearchTableViewController
    self.delegate = searchVC
    tableView.delegate = self
}

您的代码没有提及您是否检查了delegate不是nil(例如通过在其上设置断点)。

更新UITableViewCell s的最佳选择是通过数据源方法:

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

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

最新更新