我有一个带有两个标签的标签式应用程序...第一个标签有主要的操作,第二个标签有可以更新的设置。我试图将一些变量数据从Settings传递到Action选项卡。基于一些建议,我使用以下代码进行更新按钮:
@IBAction func updateBut(_ sender: Any) {
let myVC = self.storyboard?.instantiateViewController(withIdentifier: "FirstViewController") as! FirstViewController
myVC.totTime = totalTime
myVC.timeInt = intTime
self.present(myVC, animated: true, completion: nil)
}
数据传递给第一个视图控制器,但是,此选项卡现在已消失在此视图中。那么,我如何才能在屏幕上显示标签?我是任何形式的应用程序开发的初学者,我只是想通过实践来学习...使用Xcode New Project模板之一创建了选项卡式应用程序。谢谢。
答案 0 :(得分:0)
试试这种方式
(self.tabBarController?.viewControllers?[0] as! FirstViewController).totTime = totalTime
(self.tabBarController?.viewControllers?[0] as! FirstViewController).timeInt = intTime
self.tabBarController?.selectedIndex = 0
答案 1 :(得分:0)
使用协议传递数据的更好方法是,您可以定义如下的协议
protocol PassDataDelegate{
func updateFirstVc(totalTime:String)
}
并且在您的SecondViewController
类中有一个委托属性,如下所示
class SecondViewController:UIViewController{
myDelegate:PassDataDelegate?//declaration part
@IBAction func updateBut(_ sender: Any) {
myDelegate.updateFirstVc(totalTime:totalTime)
}
}
最后在你的UITabController
类中实现协议
class myTabController:UITabController,PassDataDelegate{
var firstController:FirstViewController? //declaration part
var secondController:SecondViewController?
override func viewDidLoad(){
super.viewDidLoad()
//initialize your view controller here
self.firstViewController = FirstViewController()
self.secondViewController = SecondViewController()
self.secondViewController.myDelegate = self //assign delegate to second vc
self.viewcontrollers = [firstController, secondController]
}
updateFirstVc(totalTime:totalTime){
self.firstViewController?.totTime = totalTime
self.selectedIndex = 0// here change the tab to first vc if you want to switch the tab after passing data
}
}
答案 2 :(得分:0)
self.tabBarController?.tabBar.isHidden = false
试试这个
答案 3 :(得分:0)
我是iOS新手,请纠正我,如果我错了,
TabBar之所以不可见的原因是因为您实例化了位于TabBar顶部的新FirstViewController
。
TabBar默认执行此作业,或将新的viewController添加到TabBar堆栈中。
tabBarController.viewControllers.append(myVC)
用于传递数据的TabBar保留其所有ViewController的引用。因此,您可以像这样设置或互相加入ViewControllers
var yourData{
set{
let yourVC = self.tabBarController?.viewController[0] as? FirstViewController ?? ErrorClass
yourVC.dataObj = newValue
}
get{
let yourVC = self.tabBarController?.viewController[0] as? FirstViewController ?? ErrorClass
return yourVC.dataObj
}