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