A_t*_*ter 5 xcode uitableview uiviewcontroller ios
我有一个第一个tableViewController,它在单击一个单元格后会打开第二个tableViewcontroller。第二个视图控制器以模态显示(“显示详细信息”序列),并通过以下方式关闭:
self.dismissViewControllerAnimated(true, completion: {})
Run Code Online (Sandbox Code Playgroud)
此时,第二个视图控制器滑开并露出下面的第一个视图控制器。然后,我想重新加载第一个视图控制器。我了解这可能需要使用委托函数,但不确定如何实现
小智 5
我的解决方法有点不同,因为我不想要那种依赖性。
这种方法是在您以模态方式呈现控制器时使用的,因为当您关闭呈现的控制器时,呈现的控制器不会重新加载。
无论如何解决!
相反,你创建一个单例(中介)
protocol ModalTransitionListener {
func popoverDismissed()
}
class ModalTransitionMediator {
/* Singleton */
class var instance: ModalTransitionMediator {
struct Static {
static let instance: ModalTransitionMediator = ModalTransitionMediator()
}
return Static.instance
}
private var listener: ModalTransitionListener?
private init() {
}
func setListener(listener: ModalTransitionListener) {
self.listener = listener
}
func sendPopoverDismissed(modelChanged: Bool) {
listener?.popoverDismissed()
}
}
Run Code Online (Sandbox Code Playgroud)
您的呈现控制器是否实现了这样的协议:
class PresentingController: ModalTransitionListener {
//other code
func viewDidLoad() {
ModalTransitionMediator.instance.setListener(self)
}
//required delegate func
func popoverDismissed() {
self.navigationController?.dismissViewControllerAnimated(true, completion: nil)
yourTableViev.reloadData() (if you use tableview)
}
}
Run Code Online (Sandbox Code Playgroud)
最后在您的 PresentedViewController 中的 viewDid/WillDisappear 函数或自定义函数中添加:
ModalTransitionMediator.instance.sendPopoverDismissed(true)
Run Code Online (Sandbox Code Playgroud)
小智 5
斯威夫特 5:
您可以访问呈现视图控制器 (presentingViewController) 属性,并在视图消失时使用它重新加载表视图。
class: FirstViewController {
var tableView: UITableView
present(SecondViewController(), animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)
在第二个视图控制器中,您可以在 viewWillDisappear 方法中添加以下代码:
class SecondViewController {
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
if let firstVC = presentingViewController as? FirstViewController {
DispatchQueue.main.async {
firstVC.tableView.reloadData()
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
当您关闭 SecondViewController 时,FirstViewController 的 tableview 将重新加载。
| 归档时间: |
|
| 查看次数: |
12456 次 |
| 最近记录: |