Swift 弹出视图控制器时如何在UITableView中重新加载数据
如果我有两个Swift 弹出视图控制器时如何在UITableView中重新加载数据,swift,xcode,uitableview,viewcontroller,Swift,Xcode,Uitableview,Viewcontroller,如果我有两个viewcontroller,一个包含UITableView,另一个更新tableView中的数据。当我弹出viewController并使用tableView返回视图时,如何重新加载表格数据 我已经试过使用viewDidAppear你可以像Rajesh建议的那样使用viewWillAppear: override func viewWillAppear(_ animated: Bool) { tableView.reloadData() } 或者可以使用回调函数传递数据并
viewcontroller
,一个包含UITableView
,另一个更新tableView
中的数据。当我弹出viewController
并使用tableView
返回视图时,如何重新加载表格数据
我已经试过使用
viewDidAppear
你可以像Rajesh建议的那样使用viewWillAppear:
override func viewWillAppear(_ animated: Bool) {
tableView.reloadData()
}
或者可以使用回调函数传递数据并重新加载视图控制器1的tableview
在ViewController 2中,定义回调函数:
// Callback function
var callbackResult: ((data) -> ())?
并在返回ViewController 1之前调用它:
callbackResult?(data)
self.navigationController?.popViewController(animated: true)
在ViewController 1中,使用回调函数的闭包收集结果并重新加载tableView。这可能发生在prepareForSegue内部,例如:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "goToViewController2" {
let destinationVC = segue.destination as! ViewController2
// Set any variable in ViewController2
destinationVC.callbackResult = { result in
// assign passing data etc..
self.tableView.reloadData()
}
}
}
您可以使用ViewWillDisplay,就像Rajesh建议的那样:
override func viewWillAppear(_ animated: Bool) {
tableView.reloadData()
}
或者可以使用回调函数传递数据并重新加载视图控制器1的tableview
在ViewController 2中,定义回调函数:
// Callback function
var callbackResult: ((data) -> ())?
并在返回ViewController 1之前调用它:
callbackResult?(data)
self.navigationController?.popViewController(animated: true)
在ViewController 1中,使用回调函数的闭包收集结果并重新加载tableView。这可能发生在prepareForSegue内部,例如:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "goToViewController2" {
let destinationVC = segue.destination as! ViewController2
// Set any variable in ViewController2
destinationVC.callbackResult = { result in
// assign passing data etc..
self.tableView.reloadData()
}
}
}
您可以尝试这样做:
class TableViewController: UITableViewController {
func showUpdatingViewController() {
let vc = UpdatingViewController()
vc.onUpdate = { [weak self] in
self?.tableView.reloadData()
}
navigationController?.pushViewController(vc, animated: true)
}
}
class UpdatingViewController: UIViewController {
var onUpdate: (() -> Void)?
func updatesFinished() {
onUpdate?()
dismiss(animated: true, completion: nil)
}
}
您可以尝试这样做:
class TableViewController: UITableViewController {
func showUpdatingViewController() {
let vc = UpdatingViewController()
vc.onUpdate = { [weak self] in
self?.tableView.reloadData()
}
navigationController?.pushViewController(vc, animated: true)
}
}
class UpdatingViewController: UIViewController {
var onUpdate: (() -> Void)?
func updatesFinished() {
onUpdate?()
dismiss(animated: true, completion: nil)
}
}
使用“自定义委托到闭包”将数据从第二个视图控制器传递到第一个视图控制器。更新数据源并在第一个视图控制器的
viewwillbeen
中重新加载tableview刚才所做的似乎没有什么区别,我在print语句中添加了这样的语句,因此它确实进入了viewwillbeen,但由于某些原因表没有更新显示如何在视图控制器之间传递数据?使用自定义委托关闭将数据从第二视图控制器传递到第一视图控制器。更新数据源并重新加载第一个视图控制器的viewwillbeen
中的tableview刚才做的似乎没有什么区别,我在print语句中添加了这样的语句,它确实进入了viewwillbeen,但由于某些原因,表没有更新显示如何在视图控制器之间传递数据?这很有效,谢谢您不能进行投票因为rep,但我非常欣赏。使用view时的日志将显示:“[TableView]警告仅一次:UITableView被告知布局其可见单元格和其他内容,而不在视图层次结构中(尚未将表视图或其超级视图之一添加到窗口中)。这可能会导致错误,因为在没有准确信息的情况下(例如,表视图边界、特征集合、布局边距、安全区域插入等),强制表视图内的视图加载和执行布局,并且还会由于额外的布局传递而导致不必要的性能开销。”这很管用,谢谢你不能upvote,因为rep,但我非常感谢。使用ViewWill时的日志将显示:“[TableView]仅警告一次:UITableView被告知布局其可见单元格和其他内容,而不在视图层次结构中(表视图或其超级视图之一尚未添加到窗口中)。这可能会导致错误,因为在没有准确信息的情况下(例如,表视图边界、特征集合、布局边距、安全区域插入等),强制表视图内的视图加载和执行布局,并且还会由于额外的布局传递而导致不必要的性能开销。”