我有一個在故事板中設置的UITabBarController。我想從標籤欄控制器傳遞一個數據字典,用於相應的子標籤頁,這是一個標準的UIViewController。如何將數據從標籤欄控制器傳遞到其標籤之一?
這似乎是一個很長的問題要回答,但我真的不知道從哪裏開始。我正在尋找通過這個最簡單的方法。我必須讓這些選項卡以編程方式工作嗎?指向我的任何有用的開發人員文檔也將不勝感激。
-Austin
p.s.我是新的,迄今爲止依賴於故事板的視圖控制器轉換
我有一個在故事板中設置的UITabBarController。我想從標籤欄控制器傳遞一個數據字典,用於相應的子標籤頁,這是一個標準的UIViewController。如何將數據從標籤欄控制器傳遞到其標籤之一?
這似乎是一個很長的問題要回答,但我真的不知道從哪裏開始。我正在尋找通過這個最簡單的方法。我必須讓這些選項卡以編程方式工作嗎?指向我的任何有用的開發人員文檔也將不勝感激。
-Austin
p.s.我是新的,迄今爲止依賴於故事板的視圖控制器轉換
花了幾天時間,但我發現了一個簡單的解決方案。在我的TabBarController的viewDidLoad方法,我可以訪問和使用
[[self viewControllers] objectAtIndex:0]
或任何索引要訪問我的設置選項卡式子視圖的屬性。
保存作爲我的tab1_viewController的一個實例給我一個指向對象的指針,從中我可以獲取並設置我的屬性值。這最初是不清楚的,因爲storyboard爲我創建了tab_viewController對象。我從來沒有機會按照我想要的方式初始化它們!
你最好的選擇是使用通知。
在你的標籤欄,你可以這樣做:
NSDictionary *myDictionary; // Populate this with your data.
// Fire the notification along with your NSDictionary object.
[[NSNotificationCenter defaultCenter] postNotificationName:@"Some_Notification_Name"
object:myDictionary];
然後在你的孩子標籤視圖控制器,你會「監聽」該通知。
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleNotification:)
name:@"Some_Notification_Name"
object:nil];
- (void)handleNotification:(id)object {
// Use your NSDictionary object here.
}
我無法正常工作。我試着把tabBarController代碼放在它的viewDidLoad和tabBarController:didSelectViewController中,兩者都沒有成功。我把子代碼放在viewDidLoad – austin
得到這個工作...
我有3個視圖控制器,我必須將陣列從一個傳遞到另一個..
這裏是我做過什麼
數據追加到一個選項卡的視圖控制器
NSArray *viewControllers = [self.tabBarController viewControllers];
ListViewController *listView = (ListViewController *)viewControllers[1];
listView.myArray = self.myArray;
[self.tabBarController setSelectedIndex:1];
而在此之後,加載視圖控制器,這是它
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
ListViewController *listView = (ListViewController *)[storyboard instantiateViewControllerWithIdentifier:@"IDListView"];
如果你有一個UINavigationController
爲您UITabBarController
視圖控制器之一,你可以做到以下幾點:
NSArray *viewControllers = [self.tabBarController viewControllers];
UINavigationController *myNavController = (UINavigationController *)viewControllers[2];
MyViewController *myController = [[myNavController childViewControllers] firstObject];
// Remember to alloc/init objects first if the objects haven't been initialized already.
[myController.whateverArray = [[NSArray alloc] initWithArray:@[@"Example1", @"Example2"]];
[self.tabBarController setSelectedIndex:2];
使用斯威夫特
如果你有UINavigationController
在UITabBarController
一個選項卡,您希望獲取子視圖控制器的實例,而不是創建新實例,並在更改選項卡視圖索引之前將其推送到導航視圖控制器。您可以這樣做...
此示例代碼假定導航控制器位於第一個選項卡(索引0),並且「childViewController」嵌入在導航控制器中。
let viewControllers = self.tabBarController?.viewControllers
let navController = viewControllers![0] as! UINavigationController
let profileViewController = self.storyboard?.instantiateViewControllerWithIdentifier("childViewController") as? ProfileViewController
profileViewController!.parameter1 = "Value1"
profileViewController!.parameter2 = "Value2"
navController.pushViewController(profileViewController!, animated: true)
self.tabBarController?.selectedIndex = 0
隨着斯威夫特:
if let navController = self.tabBarController?.viewControllers?[1] as? UINavigationController{
if let testController = navController.childViewControllers.first as? MyViewController{
testController.data = data
self.tabBarController?.selectedIndex = 1
}
}
我無法解析此。你如何在UITabBarController中存儲數據?你在繼承UITabBarController嗎?標籤欄控制器實際上只是一個用於控制視圖控制器的元控制器。在Apple的MVC框架中,應該使用視圖控制器將模型數據綁定到視圖。如果您需要以複雜的方式在視圖控制器之間共享數據,那麼您可以使用通知,創建單例,將數據存儲在應用程序委託中,或使用共享的外部存儲(如CoreData)。 –
傑夫,所以具體而言,我將數據傳遞給UITabBarController,但我不明白如何將數據分發到單獨的選項卡式視圖控制器 – austin