Um meinen Anmeldebildschirm anzuzeigen, wenn die Anwendung geladen wird, und nicht nachdem der Benutzer sich anmeldet, habe ich entschieden, ein Authentifizierungsobjekt in NSUserDefaults hinzuzufügen, wenn sich der Benutzer erfolgreich anmeldet. Wenn die App gestartet wird, ist dieser Auth-Parameter aktiviert und der View-Controller ist entsprechend eingestellt (wenn der Benutzer auth ist, wird ein Feed angezeigt, wenn nicht, wird ein Login-Bildschirm angezeigt). Im letzteren Fall habe ich die App delegieren Sie den Stammansicht-Controller auf den Feed zurück, nachdem der Benutzer sich angemeldet hat. Ist dies eine schlechte Vorgehensweise oder gibt es eine bessere Möglichkeit, dies zu tun?Ändern des Stammansicht-Controllers, nachdem die iOS-App geladen wurde.
Im AppDelegate:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
IIViewDeckController* deckController = [self generateControllerStack];
self.rightController = deckController.rightController;
self.centerController = deckController.centerController;
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if([[defaults objectForKey:@"auth"] isEqualToNumber:[NSNumber numberWithInt:1]]){
self.window.rootViewController = deckController;
}else{
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard"
bundle:nil];
UIViewController* vc = [sb instantiateViewControllerWithIdentifier:@"loginViewController"];
self.window.rootViewController = vc;
}
[self.window makeKeyAndVisible];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque animated:NO];
return YES;
}
- (void) setRoots
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
IIViewDeckController* deckController = [self generateControllerStack];
self.rightController = deckController.rightController;
self.centerController = deckController.centerController;
self.window.rootViewController = deckController;
[self.window makeKeyAndVisible];
}
Im Login-View-Controller:
- (IBAction)loginClick:(id)sender {
if([_emailField.text length]>0&&[_passField.text length]>0){
NSString *user = _emailField.text;
NSString *pass = _passField.text;
[[API sharedInstance] login:user andPass:pass onCompletion:^(NSDictionary *json){
NSLog(@"%@", json);
if(![json objectForKey:@"error"]){
[API sharedInstance].authorized = 1;
NSNumber *auth = [NSNumber numberWithInt:1];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:auth forKey:@"auth"];
[defaults synchronize];
captureYouAppDelegate *app = [[UIApplication sharedApplication] delegate];
[app setRoots];
}else{
[API sharedInstance].authorized = 0;
}
}];
}else{
if([_emailField.text length]<1){
[_emailField becomeFirstResponder];
}else{
[_passField becomeFirstResponder];
}
}
}
Ich frage mich, ob es eine bessere oder einfachere Weise, als das zu tun. Vielen Dank!
, warum Sie nicht einen einfachen 'UINavigationController' als' rootViewController' hinzufügen und nicht nur tun Wenn der Benutzer sich bereits angemeldet hat, drücken Sie den Anmeldebildschirm in den Navigationsstapel.es wäre viel einfacher und viel eleganter als Ihre derzeitige Lösung. – holex
@holex Wenn die Tableiste auch nach dem Einloggen benötigt wird, wäre das Hinzufügen eines UINavigationControllers keine Option, oder? – Donald