关闭并显示按钮上的视图单击从另一个视图
Posted
技术标签:
【中文标题】关闭并显示按钮上的视图单击从另一个视图【英文标题】:Dismiss and Present A View On Button Click From Another View 【发布时间】:2017-03-13 17:01:54 【问题描述】:我有一个容器视图,里面有一个表格视图。当我在表格视图上选择一个单元格时,它会显示一个视图控制器(1)。此视图控制器中有一个按钮,用于显示另一个视图控制器 (2)。当我离开 2 时,我需要 1 来重新加载它的数据。我假设要做到这一点,我需要在离开 2 后解除并再次呈现 1。我该如何做到这一点?
用于呈现 VC2 的 VC1 代码:
@IBAction func contributeButtonTapped(_ sender: Any)
if totalContributions >= NeedStore.shared.currentNeed!.amount
let alert = UIAlertController(title: "", message: "This need has already been fully contributed to.", preferredStyle: .alert)
let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.default)
alert.addAction(okAction)
self.present(alert, animated: true, completion: nil)
else
let storyboard = UIStoryboard(name: "Contribute", bundle: Bundle.main)
let viewController = storyboard.instantiateViewController(withIdentifier: "ContributeViewController") as! ContributeViewController
viewController.view.backgroundColor = .clear
viewController.modalPresentationStyle = .overCurrentContext
self.present(viewController, animated: false, completion: nil)
用于切换回 VC1 的 VC2 代码:
func detailView()
ApiManager.shared.getNeed(needId: NeedStore.shared.currentNeed!.id) (need) in
NeedStore.shared.currentNeed = need
ApiManager.shared.getNeedUser (object) in
if object
self.dismiss(animated: false, completion: nil)
let storyboard = UIStoryboard(name: "NeedDetail", bundle: Bundle.main)
let viewController = storyboard.instantiateViewController(withIdentifier: "NeedDetailViewController") as! NeedDetailViewController
viewController.view.backgroundColor = .clear
viewController.modalPresentationStyle = .overCurrentContext
self.present(viewController, animated: false, completion: nil)
【问题讨论】:
你也可以在视图控制器(1)的viewDidAppear
中处理这个
【参考方案1】:
在您的 VC(1) 的 viewDidAppear()
中添加 self.tableview.reloadData()
如果这不起作用,您可能需要创建一个委托,以便它知道您正在离开 VC(2),进入(1),然后刷新它。
更新 -
添加委托方法
protocol: ViewController2Delegate: class
func reloadTableView()
class ViewController2: UIViewController
weak var delegate: ViewController2Delegate?
@IBOutlet func goBackButton ()
delegate.reloadTableView()
VC1-
class ViewController1: UIViewController, ViewController2Delegate
func reloadTableView()
self.tableView.reloadData()
*- Whatever code you might be using to call your data too-*
【讨论】:
我想我说错了,那是我的错。表格视图在技术上将是第一个视图控制器。在其上选择一个单元格会出现我称之为 VC(1) 的内容。关闭该按钮会显示另一个视图,当我离开最终视图时,我需要单击单元格以刷新其数据后出现的视图。我们已经尝试重新加载 tableView 数据,但还没有成功。 那么,TableView -> TableViewCell -> VC1(刷新这个?) -> VC2? 表格视图 -> 单击表格视图单元格 -> VC1 出现 -> 单击按钮 VC1 -> VC2 出现 -> 当 VC2 关闭时,VC1 需要刷新它的数据。我一直运行它的 viewDidLoad 并且数据仍然没有刷新。 尝试一些简单的事情,添加 VC1 打印的 viewDidLoad() (“测试此方法是否有效”)如果打印,这意味着 viewDidLoad() 在 VC2 被关闭时被调用。让我知道:) 我实际上已经这样做了,这就是我在离开 VC2 时知道 viewDidLoad() 再次运行的方式。所以,这就是为什么我对为什么没有更新感到困惑。所有信息都是从对数据库的 Alamofire 调用中检索到的,当我加载 VC1 和离开 VC2 并且仍然没有更新时,我进行了该调用。我们拨打电话并将信息存储在本地。以上是关于关闭并显示按钮上的视图单击从另一个视图的主要内容,如果未能解决你的问题,请参考以下文章