Как передать данные с контроллера панели вкладок на одну из своих вкладок?
У меня есть UITabBarController, настроенный в раскадровке. Я хочу передать словарь данных из контроллера панели вкладок для использования на соответствующей дочерней вкладке, которая является стандартным UIViewController.
Кажется, это долгие вопросы, но я действительно не знаю, с чего начать. Я ищу самый простой способ этого. Должен ли я делать функции табуляции программно? Было бы также высоко оценено указание на любую полезную документацию разработчика.
-Austin
постскриптум я новичок и до сих пор зависел от раскадровки для переходов viewcontroller
Ответы
Ответ 1
Потребовалось пару дней, но я обнаружил простое решение. В моем методе метода TabBarController viewDidLoad я могу получить доступ и установить атрибуты моих подзонов с вкладками, используя
[[self viewControllers] objectAtIndex:0]
или любой другой индекс, к которому вы хотите получить доступ.
Сохранение того, что в качестве экземпляра моего tab1_viewController дает мне указатель на объект, из которого я могу получить и установить значения свойств. Первоначально это было непонятно, потому что раскадровка создала для меня объекты tab_viewController. У меня никогда не было возможности инициализировать их так, как я хотел!
Ответ 2
Лучше всего использовать уведомления.
В панели вкладок вы сделаете следующее:
NSDictionary *myDictionary; // Populate this with your data.
// Fire the notification along with your NSDictionary object.
[[NSNotificationCenter defaultCenter] postNotificationName:@"Some_Notification_Name"
object:myDictionary];
Затем в вашей дочерней вкладке ViewController вы будете "слушать" это уведомление.
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleNotification:)
name:@"Some_Notification_Name"
object:nil];
- (void)handleNotification:(id)object {
// Use your NSDictionary object here.
}
Ответ 3
Если у вас есть 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];
Ответ 4
Использование Swift
Если у вас есть 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
Ответ 5
С Swift:
if let navController = self.tabBarController?.viewControllers?[1] as? UINavigationController{
if let testController = navController.childViewControllers.first as? MyViewController{
testController.data = data
self.tabBarController?.selectedIndex = 1
}
}
Ответ 6
Получил эту работу...
У меня есть 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"];