문제

목표 : 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 인스턴스 인 UINavigationControllernavControllers를 추가하려고 시도했지만 이는 작동하지 않으며 대신 NIB 파일에서 두 개의 작은 버튼 (<및>)이있는 UIView와 함께 고정 된 것으로 보입니다. gtmoauth2viewtouch.xib, 이미지 아래에 포함 ...

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 메소드는 상위 뷰 컨트롤러에서 호출됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top