إضافة إينافيغاتيونيتم إلى إينافيغاتيونكونترولر الذي يلتف محرك جوجل أووث
سؤال
الهدف:للاتصال دائرة الرقابة الداخلية محرك جوجل ، والتفاف وحدة تحكم عرض دائرة الرقابة الداخلية جوجل أوث في وحدة تحكم الملاحة التي تم إنشاؤها برمجيا ، وإضافة زر إلغاء لتمكين المستخدم من إلغاء عملية أوث جوجل ، يجب أن يختاروا القيام بذلك.
المشكلة:في حين يمكنني بنجاح التفاف وحدة تحكم عرض أووث في وحدة تحكم الملاحة ، وأنا لا يمكن أن يبدو لإضافة عنصر الملاحة ، مثل زر إلغاء المطلوب.
أود أن أضيف وحدة تحكم الملاحة التي يلتف محرك جوجل أوث عرض وحدة تحكم ، على النحو التالي...
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 فيوتوش.زيب ، الصورة المدرجة أدناه...
لقد قرأت من خلال ملف غل 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;
}
يتم استدعاء طريقة الحرف الأول المخصصة هذه من وحدة تحكم العرض الأصل.