通过此post
找到关于缺少Segue执行的良好解决方案之后我正在与另一个问题发生冲突: 按照上述帖子中描述的方法,我在仪表板VC中执行我的身份验证令牌检查,如果没有设置,我激活一个指向LoginVC的segue利用委托机制,以便在一旦操作完成。现在,问题是在第一次运行时,我在显示LoginVC之前得到了Dashboard VC show。我想显示登录屏幕,立即隐藏(不知何故)Dashboard 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,我可能需要你的帮助:))
谢谢大家!
答案 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