当我单击“后退”按钮时,尝试将TableViewController 2上选定单元格上的标签传递回TableViewController one上的静态单元格上的标签。我在didSelectRowAtIndexPath()得到了正确的标签。但当我试图打印时,数据不会传回。我尝试过很多种情况,最后才来到这里。如有任何帮助,将不胜感激!
tableviewcontroller 1:
class SearchTableViewController: UITableViewController, SortProtocol {
var sort: String?
override func viewDidLoad() {
super.viewDidLoad(
SORTBYCELL.detailTextLabel?.text = sort
}
func passdata(sort: String?){
self.sort = (sort)
}TableViewController 2:
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)发布于 2016-08-27 03:23:33
你必须分配委托。如果您有一个“后退”按钮,我将假设您使用的是导航控制器。使用该方法,我们将获得第一个viewController的引用。因此,您的viewDidLoad()在SortByTable中将类似于:
override func viewDidLoad() {
super.viewDidLoad()
let searchVC = self.navigationController?.viewControllers[0] as! SearchTableViewController
self.delegate = searchVC
tableView.delegate = self
}发布于 2016-08-27 02:35:29
如果您检查delegate不是nil (例如,通过在它上设置一个断点),您的代码就没有提到。
更新UITableViewCells的最佳选择是通过数据源方法这样做:
func tableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell因此,在您的示例中,让passdata用sort的新值更新数据源,然后调用tableView.reloadData()来重新加载单元格。
https://stackoverflow.com/questions/39176706
复制相似问题