2013-12-18 2 views
1

У меня есть приложение iOS с несколькими видами.Доступ к данным iOS с нескольких видов

A login UIView, который пользователь сначала видит, а при вводе правильных учетных данных он будет доставлен на главный TabBarViewController, который «управляет» остальными видами.

Подключен UIView подключен к TabBarViewController с модальным Segue. Я также использую этот Segue для передачи данных из окна «Вход» в TabBarViewController с помощью свойств. Все хорошо до сих пор.

Как уже упоминалось, есть другие виды, связанные с этим TabBarViewController, и эта панель вкладок отображает их только.

Вопрос в том, как я могу получить доступ к свойству TabViewController (которое определяет набор loginView с определенным значением), в других представлениях? Я хочу, чтобы иметь доступ к этой недвижимости из нескольких других точек.

Спасибо.

+0

вы можете использовать KVO, а когда значение задано для объекта foo, обновите отображение/предпримите действие. Другой вариант - использовать [self.presentingViewController do stuff] ;, и вызвать действие. это действительно зависит от точного потока, который вы хотите создать ... – Raz

ответ

0

Что-то, что вы здесь не прояснили. Я предполагаю, что вы подклассифицировали UITabBarController.

Если все контроллеры представлений являются дочерними элементами контроллера панели вкладок, то self.tabBarController предоставит вам доступ к панели вкладок.

Это может закончить тем, что что-то вроде этого:

if ([self.tabBarController isKindOfClass:[MyTabBarController class]]) { 
    MyTabBarController *myTabBarController = (MyTabBarController *)self.tabBarController; 
    // … 
} 
+0

Да, это то, что я искал - Спасибо! – user3115488

+0

@ user3115488 Я чувствую, что должен сказать вам, что подкласс «UITabBarContorller» для добавления свойств для модели данных не рекомендуется Apple. Вы можете следовать рекомендациям в других ответах: создать диспетчер данных singleton или поместить данные в appDelegate. –

0

Если вы хотите, чтобы одни и те же данные из разных ViewControllers, не UIView Я думаю, то лучший подход заключается в использовании Singleton класс, где вы можете установить и получить нужные вам данные/свойство.

Если вы не знаете, как написать Singleton, хороший учебник - here.

0

Поместите эти данные в делегат вашего приложения, который на самом деле является Singleton. Другой способ - передать ссылки вашего контроллера другим контроллерам, которым необходимо получить доступ к данным другого пользователя.

0

Вы можете создать протокол для предоставления данных из ваших свойств. Подтвердите контроллер вкладки в свой протокол и реализуйте метод этого протокола. Тогда во всех видах объявить свойство с этим протоколом

id <YourProtocolName> delegate

При создании вида из вкладки контроллера набора вкладок контроллера в качестве делегата для созданного представления. После этого вы можете позвонить в воззрениях

[self.delegate access_method_from_protocol]

1

1.Add свойство для ваших AppDelegate, сеттеров и добытчиков будет осуществляться автоматически для вас

2 вашего другого доступа класса собственности следующим образом: id value = [(MyAppDelegate *)[[UIApplication sharedApplication] delegate] myGreatProperty];

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