Подтвердить что ты не робот

Как передать данные с контроллера панели вкладок на одну из своих вкладок?

У меня есть UITabBarController, настроенный в раскадровке. Я хочу передать словарь данных из контроллера панели вкладок для использования на соответствующей дочерней вкладке, которая является стандартным UIViewController.

Кажется, это долгие вопросы, но я действительно не знаю, с чего начать. Я ищу самый простой способ этого. Должен ли я делать функции табуляции программно? Было бы также высоко оценено указание на любую полезную документацию разработчика.

-Austin
постскриптум я новичок и до сих пор зависел от раскадровки для переходов viewcontroller

4b9b3361

Ответ 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"];