1

由于这篇文章,在找到关于缺少 Segue 执行的好解决方案之后

我遇到了另一个问题:按照前面提到的帖子中描述的方法,我正在仪表板 VC 中检查我的身份验证令牌,如果未设置,我会激活一个指向 LoginVC 的 segue,从而利用委托机制按顺序操作完成后关闭视图。现在,问题是在第一次运行时,我在 LoginVC 显示之前得到了 Dashboard VC 显示片刻。我想显示登录屏幕立即隐藏(不知何故)仪表板VC。换句话说,我希望用户不会注意到下面到底发生了什么。

任何的想法?这是我当前的故事板设置 在此处输入图像描述

我在 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,我可能再次需要你的帮助 :)

谢谢大家!

4

2 回答 2

1

我假设您将登录按钮链接到 IB 中的仪表板 VC 的 segue。删除此触发器并将dashboardVC 的segue 附加到登录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];
}
于 2012-02-15T18:29:13.567 回答
1

我会放入检查登录令牌并执行 segue 的代码,viewDidLoad而不是等待视图出现,您说不希望出现这种情况。

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
于 2012-02-15T18:39:54.087 回答