Frage

Ich hoffe, jemand könnte mich in die richtige Richtung weisen.

Ich habe 2 Controller, MasterViewController (der viele Daten anzeigt) und LoginViewController (loggt Benutzer ein und ruft diese Daten ab).

Der MasterViewController ist der Root-Controller.Ich habe diesen Code ganz oben, um zu überprüfen, ob der Benutzer angemeldet ist.Wenn sie angemeldet sind, wird die loadView-Methode aufgerufen, andernfalls werden sie zum Login-View-Controller weitergeleitet.

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSDictionary *session = [Global getSession];
    if(!session){

        // Not logged in.
        LoginViewController *loginViewController = [LoginViewController alloc];
        [self.navigationController presentViewController:loginViewController animated:YES completion:nil];

    }else{
        [self loadView];
    }
}

Sobald sie sich angemeldet haben, habe ich diesen Code, der sie mit diesem Code zum MasterViewController zurückbringt:

[self dismissViewControllerAnimated:NO completion:nil];

Das Problem ist, dass der MasterViewController überhaupt nicht geladen ist.Wie lade ich die gesamte Ansicht neu, bevor der Benutzer zur Ansicht zurückkehrt?

Danke, Peter

War es hilfreich?

Lösung

Es gibt verschiedene Möglichkeiten.

  1. Verwenden Sie Delegate und deklarieren Sie eine Methode zum erneuten Laden im Master View Controller, z. B. 'reloadData'.Legen Sie vor dem Anzeigen des Anmeldeansichts-Controllers den Master-Ansichts-Controller als Delegaten für loginSuccessEvent fest.Sobald die Anmeldung erfolgreich ist, rufen Sie die Delegate-Methode auf, bevor Sie sie ablehnen.

  2. Legen Sie eine bool-Eigenschaft fest, isReloadNeeded im App-Delegierten.Im Master-Ansichts-Controller, viewWillAppear oder viewWillAppear überprüfen Sie diesen Bool, um Daten neu zu laden.setzen Sie den Bool vom Login View Controller auf Ja und setzen Sie ihn nach dem erneuten Laden im Master View Controller zurück.

Zu tun Option1:

Definieren Sie ein Protokoll für die Interaktion

@protocol LoginDelegate

   -(void) loginSuccessPostProcess;

@end

Im Login-Ansicht-Controller.

.h Datei -> Deklariere eine Eigenschaft

@property (weak) id< LoginDelegate> loginDelegate;

.m -> Rufen Sie nach erfolgreicher Anmeldung vor dem Schließen die Delegate-Methode auf

//Login Success
[self. loginDelegate loginSuccessPostProcess];
[self dismissViewControllerAnimated:YES completion:nil];

Hauptansichts-Controller -> Implementieren Sie die Methode.

.h -> Protokoll übernehmen

  @interface mainViewCOntroller < LoginDelegate>

.m

  1. Legen Sie den Hauptansichts-Controller nach der Instanziierung und vor der Präsentation als Delegaten für die Delegateneigenschaft im Anmelde-Ansichts-Controller fest

    LoginViewController *login = [[LoginViewController-Zuordnung] initiieren];// Legen Sie Ihren Delegaten nach der Instanziierung und vor der Präsentation fest Login.loginDelegate = selbst;[selbst präsenter ViewController: login];

Implementieren Sie die Methode zum erneuten Laden

 -(void) loginSuccessPostProcess
 {
        //Your Method.
  }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top