我的场景是,我有三个tabbar
和第一个viewcontroller
的{{1}}并显示tabbar
和一些tableview
的视图控制器。每当我点击data
tableview
时,我都会将数据传递给一个特殊的cell
popupcontroller。如果我model
弹出控制器,则需要直接显示到选项卡dismiss
(我的意思是第二秒index 1
)也需要传递viewcontroller
。
在这里,我尝试过以下代码
内部弹出视图控制器
values
一旦弹出var item : Datum! //Datum Codable Root
@IBAction func close_click(_ sender: Any) {
NotificationCenter.default.post(name: Notification.Name(rawValue: "disconnectPaxiSocket"), object: nil)
if let presenter = presentingViewController as? HomeViewController {
presenter.updatitem = item
}
dismiss(animated: true, completion: nil)
}
首先显示dismissed
(索引0)tabbar
,所以我添加了viewcontroller
来调用函数并更改索引。
答案 0 :(得分:2)
首先,您不需要使用NotificationCenter
,因为您可以通过在选择UITabBarController
中的任何单元格时将tableView
对象传递给下一个视图控制器来简单地实现它。如下图所示:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let vc = self.storyboard?.instantiateViewController(withIdentifier: "DetailViewController") as! DetailViewController
vc.selectedIndex = indexPath.row
vc.tabBar = self.tabBarController
self.present(vc, animated: true, completion: nil)
}
,您需要在var tabBar: UITabBarController?
中声明DetailViewController
,以保存上一个视图控制器传递的值。
然后,当您关闭视图控制器时,您可以简单地选择UITabBarController
的另一个索引self.tabBar?.selectedIndex = 1
,然后只需将值传递给第一个索引视图控制器,例如:
@IBAction func close_click(_ sender: Any) {
dismiss(animated: true, completion: {
if let secondTab = self.tabBar?.viewControllers?[1] as? SecondViewController {
secondTab.selectedIndexFromFirstTab = self.selectedIndex
secondTab.tfData = self.userTF.text!
}
self.tabBar?.selectedIndex = 1
})
}
,您需要在SecondViewController
中声明对象,例如:
var selectedIndexFromFirstTab = 0
var tfData = ""
将保留上一个视图的数据。
现在您的结果将如下所示:
有关更多信息,您可以参考THIS演示项目。
编辑:
因此,从您的代码中,我看到您已将导航控制器嵌入到tabBar
控制器中,因此您需要更新close_click
方法,如下所示:
@IBAction func close_click(_ sender: Any) {
dismiss(animated: true, completion: {
if let navView = self.tabBar?.viewControllers?[1] as? UINavigationController {
if let secondTab = navView.viewControllers[0] as? HomeViewController {
secondTab.selectedIndexFromFirstTab = self.selectedIndex
secondTab.item = self.item
secondTab.tfData = "Sample"
}
}
self.tabBar?.selectedIndex = 1
})
}
答案 1 :(得分:0)
您可以使用dismiss方法的完成处理程序。
dismiss(animated: true, completion: nil)
通过传递一种方法将Tab栏更改为第二个选项卡,而不是传递nil。
disview视图控制器中的完成处理程序在视图控制器的关闭完成时被调用。
viewController.dismissViewControllerAnimated(true, completion: {
FunctionToChangeToSecondTab()
})