当我点击后退按钮时,试图将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
因此,在您的情况下,让passdata
用sort
的新值更新数据源,然后调用tableView.reloadData()
来重新加载单元格。