2013-08-20 1 views
1

Я пытаюсь придумать что-то простое, но я не могу понять это.iOS: метод вызова в закладках viewController

У меня есть UITabBarController, и в какой-то момент мне нужно отобразить UIViewController другой вкладки и вызвать метод в этом новом UIViewController, используя данные из исходного UIViewController.

Так что в основном я хочу передать данные другому UIViewController (который еще не инициализирован) и отобразить правую вкладку.

Если я использую NSNotificationCenter, я не уверен, что UIViewController вкладки еще не инициализирован, а также немного уродливо использовать здесь делегацию.

Что такое чистый способ отправки и отображения данных на новой вкладке?

ответ

2

Лучшая идея будет иметь протокол, реализованный в контроллере представления Вкладки контроллер представления может вызывать для передачи данных и установить другой контроллер зрения

+2

Не знаю, почему вы проголосовали, ваша логика звучит, и мне кажется, что если исходный плакат должен создать синглтон только для передачи этого конкретного фрагмента данных, тогда это будет лучшим решением. – bennythemink

+1

Да, спасибо! Следует отметить, что с помощью протокола контроллер представления логически развязан. Если возможно, диспетчер представлений не должен знать, что должно произойти в любой точке системы, кроме как в своем маленьком мире; он просто информирует своего делегата (если он назначен), что что-то произошло, и позволяет делегату решить, что делать с этой информацией. Абсолютно нет необходимости связывать вещи с глобальным синглом, как это было предложено в других решениях. Пребывание развязки облегчает жизнь для тестирования, удобочитаемости и делает код менее «хрупким» для изменения. – PixelCloudSt

1
int x = 1; //this is the view controller you want to go to. 
MySecondViewController *secondViewController = (MySecondViewController *)self.tabBarController.viewControllers[x]; 
[secondViewController setDataObject:dataObject]; 
[self.tabBarController setSelectedIndex:x]; 

Так что происходит, вы называя контроллер из tabBarController, он начнет там, если его нет. Затем вы можете установить все, что хотите на контроллере, а затем просто переключиться на выбранную вкладку.

+0

Лучше, но теперь ваш контроллер просмотра подключен к контроллеру панели вкладок. Протокол чище. – Abizern

+1

Я только предлагал решение ближайшего вопроса допрашивающего. Я твердо убежден, что модель и ее бизнес-логика отделены от стека контроллера. –

1

У вас должна быть некоторая модель данных (singleton?), Доступная обоими контроллерами представлений. Когда второй контроллер представления собирается отобразить его представление, он должен ссылаться на модель данных, чтобы определить данные, которые он должен отображать.

+1

Несмотря на то, что мое решение работает, это правильный способ обработки данных в приложении. iOS использует парадигму MVC и singleton/coreData/etc. модель отделяет вашу логику данных от логики контроллера. Его почти всегда лучше иметь более тяжелую модель и более легкий контроллер. –

 Смежные вопросы

  • Нет связанных вопросов^_^