2013 이전/iOS개발

[iOS 개발] UIPopoverController 의 EKEventEditViewController 키보드 문제

하구루 2017. 2. 25. 16:31

iOS5에서 PopoverController위에 EKEventEditViewController를 올려서 사용하다 보면 cancel 버튼이나 done 버튼을 통해서 나왔을때는 문제가 없지만,


UIPopoverController의 바깥 공간을 선택했을때는 UIPopoverController가 사라져도 키보드가 내려가지 않는 문제가 발생한다.

해당 viewController의 view에 endEditing: 을 이용해 보아도 변화가 없다.

구글링을 통해서 일본사이트에서 해결 방법을 찾았다.

일본어는 번역기로도 꽤 읽을 만한 내용이 나온다.

해당 내용은 참고한 사이트에서 문제점을 수정하고 정리한 소스이다.
- (BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController {

    EKEventEditViewController *ev = (EKEventEditViewController *)self.popoverController.contentViewController;
    for (UIView* view in [[ev navigationBar] subviews])
    {
        if ([NSStringFromClass([view class]) isEqualToString: @"UINavigationButton"])
        {
            UIButton* btn = (UIButton*)view;
            
            for (UIBarButtonItem* buttonItem in [btn allTargets])
            {
                id target = [buttonItem target];
                SEL sel = @selector(cancel:);
                
                if ([target respondsToSelector: sel])
                {
                    [target performSelector:sel];
                    
                    NSLog(@"target = %@", NSStringFromClass([target class]));
                    NSLog(@"action = %@", NSStringFromSelector(sel));
                    
                }
            }
        }
    }
    
    return YES;   
}

위 소스 처럼 UIPopoverController의 delegate인 "popoverControllerShouldDismissPopover:" 에 추가해주면 된다.

위 소스 내용은 UIPopoverController가 바깥쪽을 선택하여 사라지기 직전에 EKEventEditViewController의 navigation item중에서 selector가 cancel:인 item을 찾아서 cancel: 를 실행해주는 방식이다.

어찌보면 꼼수라고 할 수 있어서 정답이라고는 말할 수 없을것 같다.

혹시 좀더 깔끔한 답을 알게 된다면 다시 포스팅 해보도록 하겠다.


반응형