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: 를 실행해주는 방식이다.
어찌보면 꼼수라고 할 수 있어서 정답이라고는 말할 수 없을것 같다.
혹시 좀더 깔끔한 답을 알게 된다면 다시 포스팅 해보도록 하겠다.
반응형
'2013 이전 > iOS개발' 카테고리의 다른 글
[iPad 개발] PopoverController contentSize 문제 (0) | 2017.02.25 |
---|---|
[iOS 개발] 안정적이고 flexible 한 UITableViewCell UI 구현하기 (0) | 2017.02.25 |
[iOS 개발] 현재 view의 모든 text editing 중단하기 (0) | 2017.02.25 |
[iOS 개발] 유용한 각종 UI controller open source 정리 사이트 (0) | 2017.02.25 |
[iOS 개발] 지역에 맞게 날짜 표기 하기 (0) | 2017.02.25 |