Google 드라이브를 랩으로 uInavigationController에 uinavigationItem을 추가하십시오
문제
목표 : iOS Google 드라이브에 연결하기 위해 프로그래밍 방식으로 생성 된 탐색 컨트롤러에서 iOS Google OAuth View 컨트롤러를 랩하고 취소 단추를 추가하여 사용자가 Google OAuth 프로세스를 취소 할 수있게하려면 그들은 그렇게하기로 선택합니다.
문제 : 탐색 컨트롤러에서 OAuth View 컨트롤러를 성공적으로 랩 할 수있는 동안 원하는 취소 버튼과 같은 탐색 항목을 추가하는 것 같습니다.
다음과 같이 Google 드라이브 OAuth View 컨트롤러를 래핑하는 탐색 컨트롤러를 추가합니다 ...
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;
.
다음과 같이 사용자 정의 init 메소드를 사용하여 설정됩니다 ...
- (id)initWithParentTVC:(UITableViewController *)tvc {
self = [super init];
[self setParentTVC:tvc];
return self;
}
.
UINavigationItem
인스턴스 인 UINavigationController
에 navController
s를 추가하려고 시도했지만 이는 작동하지 않으며 대신 NIB 파일에서 두 개의 작은 버튼 (<및>)이있는 UIView
와 함께 고정 된 것으로 보입니다. gtmoauth2viewtouch.xib, 이미지 아래에 포함 ...
GTL 파일 GTMOAuth2ViewControllerTouch.m
를 읽으려면 사용할 수있는 방법이나 서브 클래스를 사용하여 무시할 수 있는지 여부를 확인하려고하지만이 작업을 수행하려는 내 시도에 확신이 없습니다.
최상의 추측은이 코드가 GTMOAuth2ViewControllerTouch.m
에서이 코드로 설정된 OAuth View 컨트롤러를 래핑하는 모든 탐색 컨트롤러가 ...
- (void)setUpNavigation {
rightBarButtonItem_.customView = navButtonsView_;
self.navigationItem.rightBarButtonItem = rightBarButtonItem_;
}
.
지원 제발?
해결책
이것은 Imran Khan ama> 탁월한 답변이이 스택 오버플로에 대한 그의 응답으로 제공됩니다. 질문 : Google 드라이브 iOS SDK : 디스플레이 로그인 버튼 취소 / P>
googleAuthCheck
메소드는 상위 뷰 컨트롤러의 ViewDIDOlD 또는 ViewWillAppear 메서드에서 호출되어야합니다. (iOS Google 드라이브 SDK에 대한 합리적인 이해가 여기에 가정하므로 추가 설명이 필요한지 알려 드리십시오.)
또한 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;
.
다음과 같이 사용자 정의 init 메소드를 사용하여 설정됩니다 ...
- (id)initWithParentTVC:(UITableViewController *)tvc {
self = [super init];
[self setParentTVC:tvc];
return self;
}
.
이 사용자 지정 init 메소드는 상위 뷰 컨트롤러에서 호출됩니다.