2013-04-25 3 views
0

У меня есть вид входа, который приводит к UITabBarController с четырьмя вкладками. Что я хочу, когда пароль пуст или ошибочен, пользователю будет предложено оставаться в том же представлении (вид входа), а не контроллере панели вкладок. Другими словами, я хочу иметь возможность просматривать панель вкладок, если пароль в порядке (не пустой и правильный). Можно ли продолжать просмотр имени входа, пока не будет указан правильный пароль? Есть идеи?Запретить пользователю вводить UITabBarController с логином

+0

Пожалуйста, дайте больше информации, вы используете раскадровку или instatiating все программно? – ararog

+0

Я использую раскадровку. – user1845360

+0

Является ли ваша кнопка входа в систему напрямую связанной с раскадровкой или вы вызываете segue с 'performSegueWithIdentifier'? – ararog

ответ

0

Как я понимаю, вы хотите отключить свою панель в какое-то время.

Если вы используете UITabBarController вы можете использовать

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController { 
    return NO; 
} 

или вы можете отключить userInteractionEnabled

myTabBar.userInteractionEnabled = NO; 

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

UIView *view = [[UIView alloc] initWithFrame:self.view.bounds]; 
view.backgroundColor = [UIColor blackColor]; 
view.alpha = 0.3f; 
[self.tabBarController.view addSubview:view]; 
[view release]; 
+0

Как вы получаете ссылку на UITabBarController? – user1845360

+0

Если вы пишете код в UIViewController, он имеет свойство self.tabBarController –

+0

Я установил userInteractionEnabled, но по-прежнему показываю панель вкладок, как и раньше. – user1845360

0

Что вы описываете - это мода al view. Если у вас есть существующий контроллер входа, представить его:

[someViewController presentViewController:loginController animated:YES completion:nil] 

Это расположит loginController над всеми другими контроллерами. Когда пользователь ввел правильный пароль (! И только тогда), вы должны уволить его:

[self dismissViewControllerAnimated:YES completion:nil]; 

Если вы хотите loginController иметь строку заголовка, не забудьте обернуть его в UINavigationController и представить контроллер нав вместо ,

+0

Всякий раз, когда я пытаюсь закрыть окно входа в систему, я получаю: Предупреждение: попытка отклонить из контроллера представления пока выполняется презентация или увольнение! – user1845360

+0

Установили ли вы точку останова, чтобы код вызывался только один раз? Вы отклоняетесь в некотором коде, который вызывается в результате самой презентации (т. Е. 'ViewDidAppear:')? – jszumski

0

YourAppDelegate.m:

@interface YourAppDelegate() 
@property(nonatomic, retain) UITabBarController *tabBarController; 
@property(nonatomic, retain) UIViewController *loginViewController; 
- (void)allocateAndShowLoginViewController; 
- (void)allocateAndShowMenuController; 
@end 
@implementation YourAppDelegate 
@synthesize tabBarController; 
@synthesize loginViewController; 
#pragma mark - 
#pragma mark Application lifecycle 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];   
    [self.window makeKeyAndVisible]; 
    [self allocateAndShowLoginViewController];  
    return YES; 
} 

- (void)allocateAndShowLoginViewController{ 
    // Show Login View Controller (for example:) 
    // My Sample login view controller uses delegate to report when user has been logged in 
    self.loginViewController = [[[UIViewController alloc] initWithDelegate:self] autorelease]; 
    self.window.rootViewController = loginViewController; 
} 

- (void)allocateAndShowTabBarController{ 
    self.tabBarController = [[[UITabBarController alloc] init] autorelease]; 

    UINavigationController  *viewController1 = [[[UINavigationController alloc] initWithRootViewController:[[[UIViewController alloc] init] autorelease]] autorelease]; 

    UINavigationController  *viewController2 = [[[UINavigationController alloc] initWithRootViewController:[[[UIViewController alloc] init] autorelease]] autorelease]; 

    self.tabBarController.viewControllers = @[viewController1, viewController2]; 
    self.tabBarController.customizableViewControllers = nil; 

    self.window.rootViewController = self.tabBarController; 
} 


#pragma mark - loginViewControllerDelegate 
- (void)loginViewControllerDidLogin:(PSLoginViewController*)controller{ 
    [self allocateAndShowMenuController]; 
} 

Нечто подобное

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