Frage

Ziel:Um eine Verbindung zu iOS Google Drive herzustellen, binden Sie den Google OAuth-Ansichtscontroller für iOS in einen programmgesteuert erstellten Navigationscontroller ein und fügen Sie eine Schaltfläche „Abbrechen“ hinzu, damit der Benutzer den Google OAuth-Prozess abbrechen kann, falls er dies wünscht.

Problem:Während ich den OAuth-Ansichtscontroller erfolgreich in einen Navigationscontroller einbinden kann, kann ich anscheinend kein Navigationselement hinzufügen, wie z. B. die gewünschte Schaltfläche „Abbrechen“.

Ich füge einen Navigationscontroller hinzu, der den Google Drive OAuth-Ansichtscontroller wie folgt umschließt ...

GTMOAuth2ViewControllerTouch *authViewController = nil;
if (!self.isAuthorized) {
    SEL selectorFinish = @selector(viewController:finishedWithAuth:error:);
    SEL selectorButtonCancel = @selector(buttonCancelTapped:);

    authViewController = [[GTMOAuth2ViewControllerTouch alloc] initWithScope:kGTLAuthScopeDrive
                                                                    clientID:kClientID
                                                                clientSecret:kClientSecret
                                                            keychainItemName:kKeychainItemName
                                                                    delegate:self
                                                            finishedSelector:selectorFinish];

    UINavigationController *navController = [[UINavigationController alloc] init];

    [navController addChildViewController:authViewController];

    [self.parentTVC presentViewController:navController animated:YES completion:nil];
}

Der Übersichtlichkeit halber die Variable parentTVC ist ein öffentliches Eigentum,

@property (nonatomic, strong) UITableViewController *parentTVC;

und wird mithilfe einer benutzerdefinierten Init-Methode wie folgt festgelegt ...

- (id)initWithParentTVC:(UITableViewController *)tvc {
    self = [super init];
    [self setParentTVC:tvc];

    return self;
}

Ich habe versucht, etwas hinzuzufügen UINavigationItems zum UINavigationController Beispiel navController, aber das funktioniert nicht, und stattdessen scheine ich bei dem festzustecken UIView mit den beiden kleinen Schaltflächen (< und >) in der NIB-Datei GTMOAuth2ViewTouch.xib, Bild unten enthalten ...

GTMOAuth2ViewTouch.xib

Ich habe die GTL-Datei durchgelesen GTMOAuth2ViewControllerTouch.m Ich möchte herausfinden, ob es eine Methode gibt, die ich möglicherweise verwenden könnte, oder ob ich sie durch Unterklassen überschreiben kann, aber ich bin nicht zuversichtlich, was meine Versuche angeht.

Meine beste Vermutung ist, dass jeder Navigationscontroller den durch diesen Code festgelegten OAuth-View-Controller umschließt GTMOAuth2ViewControllerTouch.m...

- (void)setUpNavigation {
  rightBarButtonItem_.customView = navButtonsView_;
  self.navigationItem.rightBarButtonItem = rightBarButtonItem_;
}

Bitte um Hilfe?

War es hilfreich?

Lösung

Das ist meine Neuinterpretation von Imran KhanIn seiner Antwort auf diese Frage zum Stapelüberlauf lieferte er die hervorragende Antwort: Google Drive iOS SDK:Schaltfläche „Anmeldung abbrechen“ anzeigen

Der googleAuthCheck Die Methode sollte entweder in der viewDidLoad- oder viewWillAppear-Methode des übergeordneten View-Controllers aufgerufen werden.(Ich gehe hier von einem angemessenen Verständnis des iOS Google Drive SDK aus. Lassen Sie mich daher wissen, wenn ich weitere Erläuterungen hinzufügen muss.)

Auch, wenn auch ein kleines Problem, bei der Verwendung initWithBarButtonSystemItem:UIBarButtonSystemItemCancel erfordert, dass dann nur der Titeltext des View-Controllers lokalisiert werden muss (wenn Sie die Lokalisierung implementieren).

- (void)googleAuthCheck {
    if (!self.isAuthorized) {
        SEL selectorFinish = @selector(viewController:finishedWithAuth:error:);
        SEL selectorButtonCancel = @selector(buttonCancelTapped:);

        UINavigationController *navController = [[UINavigationController alloc] init];

        UINavigationItem *navigationItem = [[UINavigationItem alloc] initWithTitle:<<localised string for title>>];
        UIBarButtonItem *barButtonItemCancel = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:selectorButtonCancel];
        UINavigationBar *navigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, 320, 63)];

        [navigationItem setRightBarButtonItem:barButtonItemCancel];
        [navigationBar setTranslucent:NO];
        [navigationBar setItems:[NSArray arrayWithObjects: navigationItem,nil]];

        [navController.view addSubview:navigationBar];

        GTMOAuth2ViewControllerTouch *authViewController = nil;
        authViewController = [[GTMOAuth2ViewControllerTouch alloc] initWithScope:kGTLAuthScopeDrive
                                                                        clientID:kClientID
                                                                    clientSecret:kClientSecret
                                                                keychainItemName:kKeychainItemName
                                                                        delegate:self
                                                                finishedSelector:selectorFinish];

        [navController addChildViewController:authViewController];

        [self.parentTVC presentViewController:navController animated:YES completion:nil];
    }
}

Zur Klarheit, Die buttonCancelTapped: Methode ist wie folgt...

- (IBAction)buttonCancelTapped:(UIBarButtonItem *)sender {
    [self.parentTVC dismissViewControllerAnimated:YES completion:^(void){}];
}

Zur Klarheit, Die Variable parentTVC ist ein öffentliches Eigentum,

@property (nonatomic, strong) UITableViewController *parentTVC;

und wird mithilfe einer benutzerdefinierten Init-Methode wie folgt festgelegt ...

- (id)initWithParentTVC:(UITableViewController *)tvc {
    self = [super init];
    [self setParentTVC:tvc];

    return self;
}

Diese benutzerdefinierte Init-Methode wird vom übergeordneten View-Controller aufgerufen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top