可以在View Controllers之间传递数据但Tab键消失

时间:2018-02-09 04:45:22

标签: ios swift uitabbarcontroller uitabbar

我有一个带有两个标签的标签式应用程序...第一个标签有主要的操作,第二个标签有可以更新的设置。我试图将一些变量数据从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模板之一创建了选项卡式应用程序。谢谢。

4 个答案:

答案 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
     }