Добавление экрана входа в систему перед Cocoa Прикладная панель Touch Tab для IOS
По-прежнему все вокруг. Я даже не близко, но в любом случае.... У меня есть приложение TabBar, созданное из Xcode. Он работает, у меня есть три вида вкладок, которые я умею манипулировать и т.д.
Я хотел бы поставить файл nib для входа в систему перед этим целым, требуя от пользователя ответа на (с жестким кодом) имя пользователя и пароль. Если вы получите это право, затем отрисуйте вкладку, чтобы они могли щелкнуть.
У меня есть другое приложение, которое я написал, которое содержит имя пользователя и пароль, у меня возникают проблемы с логикой оттуда и помещением его перед частью TabApplication.
У кого-нибудь есть предложения?
Ответы
Ответ 1
В приложении AppDelegate в конце метода application didFinishLaunchingWithOptions
вы увидите следующее:
[window addSubview:tabcontroller.view];
[window makeKeyAndVisible];
return YES;
Просто инициализируйте свой контроллер входа в систему и добавьте его после tabcontroller, например:
initialScreenViewController = [[InitialScreenViewController alloc] init];
[window addSubview:tabcontroller.view];
[window addSubview:initialScreenViewController.view];
[window makeKeyAndVisible];
return YES;
В вашем контролере входа в систему после аутентификации пользователя вы можете скрыть его следующим образом:
[self.parentViewController.view setHidden:YES];
который позволяет вам отображать его снова, если у вас есть выход из системы.
Ответ 2
Стандартный способ:
- Поместите все, что связано с экраном входа в представление, и подкласс
UIViewController
, который управляет этим.
-
Представьте это мнение в приложении делегата в application:didFinishLaunchingWithOptions:
, вызвав
LoginController*loginController= ... ; // create the view controller for the login screen
[self.tabController presentModalViewController:loginController animated:YES];
Таким образом, анимация между переходом и т.д. автоматически обрабатывается.
Вы можете позже уволить его после успешного входа в систему. Это можно сделать изнутри LoginController
на
[self.parentViewController dismissModalViewControllerAnimated:YES];
Тем не менее, мне часто необходимо выполнить дополнительную настройку после завершения регистрации. Итак, я должен сначала сообщить делегату приложения, что логин сделан, а затем выполните
[self.tabController dismissModalViewControllerAnimated:YES];
из делегата приложения. Тогда я могу выполнять дополнительные задания.
Чтобы связаться с делегатом приложения, я бы использовал NSNotification
, но это может быть немного сложно для вас.
Один из способов, который может быть легче понять (но более уродливым на мой вкус), - это определить метод, скажем loginDone
в делете приложения.
Затем внутри LoginViewController
вы можете сделать
MyAppDelegate*appDelegate=[[UIApplication sharedApplication] delegate];
[appDelegate loginDone];
Ответ 3
Если вы начинаете с приложения панели вкладок по умолчанию, вы можете сделать это следующим образом:
- В MainWindow.xib создайте UIView, который содержит все, что вы хотите иметь на экране своего пароля.
- Прикрепите все, что вам нужно до IBOutlets в AppDelegate, и напишите метод, который проверяет, действительно ли пароль.
- В методе applicationDidFinishLaunching замените
[window addSubview:tabBarController.view];
на [window addSubview:/*whatever you called the view with the password stuff in it*/];
- Если пользователь вводит правильный пароль, выполните следующие действия:
[passView removeFromSuperview];
[window addSubview:tabBarController.view];
И вы должны быть в обычном приложении панели вкладок.
Ответ 4
Я предпочитаю делать следующее:
В приложении Делегат didFinishLaunchingWithOptions
:
FirstViewController *viewController1 = [[FirstViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
SecondViewController *viewController2 = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
ThirdViewController *viewController3 = [[ThirdViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
UINavigationController *navController1 = [[UINavigationController alloc] initWithRootViewController:viewController1];
UINavigationController *navController2 = [[UINavigationController alloc] initWithRootViewController:viewController2];
UINavigationController *navController3 = [[UINavigationController alloc] initWithRootViewController:viewController3];
self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.viewControllers = @[navController1, navController2, navController3];
LoginViewController *loginViewController = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
UINavigationController *loginNavController = [[UINavigationController alloc] initWithRootViewController:loginViewController];
self.window.rootViewController = loginNavController;
Затем после получения обратного вызова аутентификации вы можете иметь что-то подобное в своем делетете приложения:
- (void)setAuthenticatedState:(BOOL)authenticated
{
if (authenticated == YES) {
dispatch_async(dispatch_get_main_queue(), ^(){
self.window.rootViewController = self.tabBarController;
});
}else{
// Stuff
}
}