在登录过程中隐藏Segue

时间:2012-02-15 12:20:23

标签: ios5 login delegates segue

通过此post

找到关于缺少Segue执行的良好解决方案之后

我正在与另一个问题发生冲突: 按照上述帖子中描述的方法,我在仪表板VC中执行我的身份验证令牌检查,如果没有设置,我激活一个指向LoginVC的segue利用委托机制,以便在一旦操作完成。现在,问题是在第一次运行时,我在显示LoginVC之前得到了Dashboard VC show。我想显示登录屏幕,立即隐藏(不知何故)Dashboard VC。换句话说,我希望用户不会注意到底下的内容。

有什么想法吗? 这是我目前的故事板设置 enter image description here

我在DashboardVC中检查我的凭据:

- (void)viewWillAppear:(BOOL)animated {
//check if the token is set,if not trigger the Login screen
NSString* token = nil;
NSUserDefaults* userPref = [NSUserDefaults standardUserDefaults];
token = [userPref objectForKey:@"AuthToken"];
if (token == nil) {
    NSLog(@"Token not present,Login required!");
    [self performSegueWithIdentifier:@"sLogin" sender:nil];
    [super viewWillAppear:NO];

}
//[super viewWillAppear:YES];
}


// if the Segue was triggered by the "Logout" button we erase the token otherwise 
// simply perform the login since there was no token at all
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

if ([sender tag] == 5) {
    NSLog(@"User selected Logout");
    //remove the token
    NSUserDefaults* userPref = [NSUserDefaults standardUserDefaults];
    [userPref removeObjectForKey:@"AuthToken"];
    [userPref synchronize];
    NSLog(@"Token removed.");
}

if ([segue.identifier isEqualToString:@"sLogin"]) {
    LoginViewController *livc = segue.destinationViewController;
    livc.delegate = self; // For the delegate method
}

}

@ ElJay,我可能需要你的帮助:))

谢谢大家!

2 个答案:

答案 0 :(得分:1)

我假设您已将登录按钮链接到IB中的Dashboard VC的segue。删除此触发器并将dashboardVC的segue附加到Login VC而不是登录按钮。

然后在你的代码中,如果authToken不等于nil,那么执行

[self performSegueWithIdentifier:@"sDashboard" sender:self];

所以基本上你的代码就是

if (token == nil) {
    NSLog(@"Token not present,Login required!");
    [self performSegueWithIdentifier:@"sLogin" sender:nil];
    [super viewWillAppear:NO];

} else {
    [self performSegueWithIdentifier:@"sDashboard" sender:self];
}

答案 1 :(得分:1)

我会放置检查登录令牌的代码,并在viewDidLoad中执行segue,而不是等待视图显示,这是您不想要的。

if ([[NSUserDefaults standardUserDefaults] boolForKey:@"LoggedIn"] == NO) {
        [self performSegueWithIdentifier:@"Push LogIn" sender:self];
    }

如果你正在使用带有动画的segue,那么你可能仍会看到rootviewController,所以我通过创建一个不使用动画的自定义segue解决了这个问题,因此登录viewController会立即出现。

.h文件

@interface UIStoryboardSegueNoAnim : UIStoryboardSegue

@end

.m文件

#import "UIStoryboardSegueNoAnim.h"

@implementation UIStoryboardSegueNoAnim

- (void)perform {
    [self.sourceViewController presentModalViewController:self.destinationViewController animated:NO];
}

@end