Контроллер панели ввода iOS: мне нужно показать разные контроллеры представлений для неавторизованного пользователя

У меня есть контроллер панели вкладок с 3 вкладками: Поиск, Сообщения, Моя страница

Уполномоченный пользователь может увидеть некоторую информацию на всех трех вкладках.

Но для неавторизованного пользователя – когда он нажимает на сообщения или на мою страницу – я хочу показать это:

Пожалуйста, войдите в систему или зарегистрируйтесь [вход в систему] [регистрация кнопки]

Я не хочу показывать это как модальный, я хочу держать панель вкладок внизу. Нажав на [button sign-in] увидите окно модального входа.

Итак, каков правильный подход для этого? Нужно ли каким-то образом создать многоразовый контроллер представлений? Если да, как мне показать его для многих вкладок в контроллере панели вкладок, а затем после входа в систему вернуться к обычным контроллерам?

3 Solutions collect form web for “Контроллер панели ввода iOS: мне нужно показать разные контроллеры представлений для неавторизованного пользователя”

Вы могли бы иметь контроллер вида для «Моя страница» как пустой вид, проверить статус входа в ViewWillLoad (в разделе «Моя страница VC»), затем на основе AUTHORIZED / UNAUTHORIZED вы можете загрузить один из двух XIB в VC.

В качестве альтернативы вы можете динамически изменять панель вкладок на основе состояния входа. При загрузке вкладка «Войти сейчас» будет удалена, а вкладка «Моя страница» может быть добавлена. Взгляните на что-то подобное, я написал:

 NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; if([prefs boolForKey:@"is_logged_in"]) { NSMutableArray * vcs = [NSMutableArray arrayWithArray:self.viewControllers]; [vcs removeObjectAtIndex:2]; LoginVC * myPage = [[LoginVC alloc] init]; [vcs addObject:myPage]; [self setViewControllers:vcs animated:YES]; } 

Примечание. Чтобы использовать вышеуказанный код, вам нужно сделать свой UITabBarController настраиваемым классом и добавить его в ViewDidLoad

Использовать методы UITabBarControllerDelegate

 - (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController{ return NO;// if unauthorized } - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{ } 

Для вас есть много подходов. Как только это Simple:

  • Добавьте представление в свой ключ и держите его скрытым. Это представление должно содержать все ваши сообщения и кнопку. Сделайте это в AppDelegate.

Предоставьте этот код в

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions UIView *view = [[UIView alloc]initWithFrame:self.window.frame]; [view setBackgroundColor:[UIColor colorWithWhite:0.2 alpha:0.7]]; UIButton * loginButton = [UIButton buttonWithType:UIButtonTypeCustom]; [loginButton setTitle:@"Sign In" forState:UIControlStateNormal]; [loginButton setTitleColor:[UIColor blueColor] forState:UIControlStateNormal]; [loginButton setBackgroundImage:GETIMAGE(@"loginNormal", @"png") forState:UIControlStateNormal]; [loginButton setBackgroundImage:GETIMAGE(@"loginPressed", @"png") forState:UIControlStateHighlighted]; [loginButton setFrame:CGRectMake(100, 300, 100, 40)]; [loginButton addTarget:self action:@selector(LoginMe:) forControlEvents:UIControlEventTouchUpInside]; [view addSubview:loginButton]; UIButton * cancelButton = [UIButton buttonWithType:UIButtonTypeCustom]; [cancelButton setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; [cancelButton setTitle:@"Cancel" forState:UIControlStateNormal]; [cancelButton setBackgroundImage:GETIMAGE(@"loginNormal", @"png") forState:UIControlStateNormal]; [cancelButton setBackgroundImage:GETIMAGE(@"loginPressed", @"png") forState:UIControlStateHighlighted]; [cancelButton setFrame:CGRectMake(100, 350, 100, 40)]; [cancelButton addTarget:self action:@selector(DismissMe:) forControlEvents:UIControlEventTouchUpInside]; [view addSubview:cancelButton]; [[[UIApplication sharedApplication] keyWindow] addSubview:view]; view.center = [[UIApplication sharedApplication] keyWindow].center; [view setTag:666666]; [view setAlpha:0.0]; 
  • Внедрите свои методы DismissMe и LoginMe
  • Теперь нажимаем на что-то, как вы сказали *, когда он нажимает на сообщения или мою страницу *

Добавьте этот код, если пользователь несанкционирован.

 [[[UIApplication sharedApplication] keyWindow] bringSubviewToFront:[[[UIApplication sharedApplication] keyWindow] viewWithTag:666666]]; [[[[UIApplication sharedApplication] keyWindow] viewWithTag:666666] setAlpha:1.0]; 
  • Теперь в реализации LoginMe вы можете сделать что-то вроде этого Modal.

     UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController; if([self.window.rootViewController isKindOfClass:[UITabBarController class]]) { self.loginController = [[MyLoginViewController alloc]init]; [topController presentViewController:self.loginController animated:YES completion:nil]; } 

вот скриншот: – Мой домашний экран

Домашний экран

  • SignIn Отмена, если неавторизованный.

SignIn Отмена Если неавторизованный.

Надеюсь, это поможет.

  • Сохранение исходного цвета изображения выбранных и невыделенных значков UITabBar
  • Передача данных между представлениями UITabBarController
  • iOS - перезагрузка UIView при нажатии значка закладки?
  • Черный фон на прозрачном UITabBar
  • Использование нескольких раскадровки с помощью TabBarController
  • Как я могу представить Modal VIew Controller из TabBarController
  • Как загрузить все представления в UITabBarController?
  • Панель вкладок с несколькими вкладками с использованием только одного контроллера вида
  • Нажмите кнопку переключения с контроллера просмотра, управляемого UITabBarController
  • Добавление контроллера панели вкладок программно в текущий поток приложений
  • UITabBarController скрыть больше навигационной панели
  • Interesting Posts

    показывать индикатор выполнения до тех пор, пока видео не загрузится IOS7

    Избегайте нескольких вызовов веб-службы в ios

    Сообщение об ошибке DTCoreText после реализации

    Использовать CAGradientLayer в SpriteKit?

    Быстрая необязательная привязка с кортежами

    Как повторно включить таймер простоя в ios после его отключения (чтобы дисплей снова заснул)?

    Дизайн для iPhone и iPad, когда iPad покажет все Container Views и iPhone, только некоторые из них

    Получение 0,2 ГБ дополнительного пространства в iPad

    Создание пользовательского UITextView с помощью UILabels, а также текст в нем

    iOS Keychain Обмен данными между устройствами

    Добавьте новый UIBackgroundMode в приложение App Store с помощью Tweak / script Jailbreak

    ScreenFlow: выберите область для захвата или обрезки видео, как?

    Нужен любой пример UILocalNotifications

    Чтение строки из файла .strings в XCode

    React Native: невозможно загрузить изображение

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.