2017-05-25 95 views
0

如何将UIViewController中的数据传递给内部的UIViewController之一?如何将数据传递给UITabBarController?

下不工作:

let hospitalsController = segue.destination as! postRequest 
hospitalsController.hospitalName = "Hospital Name" 
上面的代码当试图

,我得到以下错误:

Could not cast value of type 'UITabBarController' (0x10d05f418) to 'ProjectName.postRequest' (0x10b17fdd0). 

当我尝试以下操作:

let test = self.tabBarController?.viewControllers![0] as! UINavigationController 
      let test2 = test.topViewController as! postRequest 
      test2.hospitalName = "Khola Hospital" 

的应用程序崩溃没有错误,

,当我试图打印print(tabBarController?.viewControllers)这表明我在控制台

什么是从UIViewController数据传递给内部UITabBarControllerUIViewControllers的一个正确的方式nil

UPDATE 这里是我的主要情节串连图板 StoryBoard

的数据将被传递从他顶UIViewController到你太封闭,使右下角UIViewController

回答

1

它的工作只是一个错误,你需要投入segue.destinationUITabBarController,你们都准备好了。

if let tabbarController = segue.destination as? UITabBarController, 
    let postVC = tabbarController.viewControllers?.first as? postRequest, 

    postVC.hospitalName = "Khola Hospital" 
} 
+0

的应用程序不会崩溃,但值不会传递给hospitalName。它显示无控制台 –

+0

我更新了问题的截图 –

+0

@BehrouzRiahi有没有导航控制器检查编辑的答案,如果它仍然无法正常工作,然后改变'第一''最后' –

0

创建自定义UITabBarController类和数据传递给tabBarController,然后在你想要的,你想要得到医院名称只是检查的tabBarController可用性和取医院名称ViewController

class YourCustomTabBarController: UITabBarController { 
    var hospitalName = "" 
    //Do You Other Work Below 
} 

class PostRequest: UIViewController { 
    var hospitalName = "" 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     if let tabBarVC = self.tabBarController as? YourCustomTabBarController { 
      self.hospitalName = tabBarVC.hospitalName 
     } 
     //Handle Other Work. 
    } 
} 


if let tabBarVC = segue.destination as? YourCustomTabBarController { 
    tabBarVC.hospitalName = "XYZ Hospital" 
}