إضافة إينافيغاتيونيتم إلى إينافيغاتيونكونترولر الذي يلتف محرك جوجل أووث

StackOverflow https://stackoverflow.com//questions/23003002

سؤال

الهدف:للاتصال دائرة الرقابة الداخلية محرك جوجل ، والتفاف وحدة تحكم عرض دائرة الرقابة الداخلية جوجل أوث في وحدة تحكم الملاحة التي تم إنشاؤها برمجيا ، وإضافة زر إلغاء لتمكين المستخدم من إلغاء عملية أوث جوجل ، يجب أن يختاروا القيام بذلك.

المشكلة:في حين يمكنني بنجاح التفاف وحدة تحكم عرض أووث في وحدة تحكم الملاحة ، وأنا لا يمكن أن يبدو لإضافة عنصر الملاحة ، مثل زر إلغاء المطلوب.

أود أن أضيف وحدة تحكم الملاحة التي يلتف محرك جوجل أوث عرض وحدة تحكم ، على النحو التالي...

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];
}

من أجل الوضوح ، المتغير parentTVC هي ملكية عامة,

@property (nonatomic, strong) UITableViewController *parentTVC;

ويتم تعيين باستخدام طريقة الحرف الأول مخصص ، على النحو التالي...

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

    return self;
}

لقد حاولت أن أضيف UINavigationItemق إلى UINavigationController المثال navController, ، ولكن هذا لا يعمل ، وبدلا من ذلك يبدو لي أن تكون عالقة مع UIView مع اثنين من الأزرار الصغيرة (< و>) في ملف بنك الاستثمار القومي غتموث 2 فيوتوش.زيب ، الصورة المدرجة أدناه...

GTMOAuth2ViewTouch.xib

لقد قرأت من خلال ملف غل GTMOAuth2ViewControllerTouch.m لمحاولة معرفة ما إذا كانت هناك طريقة يمكنني استخدامها أو ما إذا كان بإمكاني تجاوزها عن طريق التصنيف الفرعي ، لكنني لست واثقا من محاولاتي للقيام بذلك.

أفضل تخميني هو أن أي وحدة تحكم الملاحة التفاف وحدة تحكم عرض أووث التي وضعتها هذا الرمز من GTMOAuth2ViewControllerTouch.m...

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

المساعدة من فضلك?

هل كانت مفيدة؟

المحلول

هذا هو بلدي إعادة تفسير عمران خانالجواب ممتاز المقدمة في رده على هذا السؤال تجاوز المكدس: جوجل محرك دائرة الرقابة الداخلية سك:عرض زر إلغاء تسجيل الدخول

ال googleAuthCheck يجب استدعاء الأسلوب في طريقة فيوديدلود أو فيويلابير من وحدة تحكم عرض الأصل.(أفترض هنا فهم معقول من دائرة الرقابة الداخلية جوجل محرك سك ، لذلك اسمحوا لي أن أعرف إذا كنت بحاجة إلى إضافة مزيد من التوضيح.)

أيضا ، وإن كانت مشكلة صغيرة ، باستخدام initWithBarButtonSystemItem:UIBarButtonSystemItemCancel يتطلب أن يكون نص العنوان لوحدة التحكم في العرض فقط بحاجة إلى الترجمة (إذا كنت تقوم بتنفيذ الترجمة).

- (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];
    }
}

من أجل الوضوح, ، ال buttonCancelTapped: الطريقة على النحو التالي...

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

من أجل الوضوح, ، المتغير parentTVC هي ملكية عامة,

@property (nonatomic, strong) UITableViewController *parentTVC;

ويتم تعيين باستخدام طريقة الحرف الأول مخصص ، على النحو التالي...

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

    return self;
}

يتم استدعاء طريقة الحرف الأول المخصصة هذه من وحدة تحكم العرض الأصل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top