2017-05-25 92 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" 
}