2010-08-21 4 views
8

UINavigation 바를 사용하여 iPad에 팝업을 표시하고 있습니다. 두 번째보기에는 키보드를 표시 할 수있는 UISearchController가 있습니다. 키보드는 popover를 밀어 넣습니다. 그러나 UINavigation bar의 'back'버튼을 누르면 키보드가 닫히지 만 popover는 원래 위치로 다시 내려 가지 않습니다. 누구든지 그 문제를 해결하는 방법을 알고 있습니까? 감사!UIPopoverController가 키보드를 뒤로 밀면 원래 위치로 이동하지 않습니다.

답변

9

좋아, 실제로 (나는) 당신의 질문이 무엇을 요구하고 있는지를 알아 냈다 ... 그리고 누군가가 구글에서 이것에 비틀 거린 경우에, 나는 내가 어떻게했는지에 대한 답을 찾았다. 해킹 작업 같은 느낌이지만 다른 방법으로는 찾을 수 없었습니다. 키보드를 제공 컨트롤러에서

, 나는 키보드를 일축 때마다 알림을 게시했다 :

[aTextField resignFirstResponder]; 
[[NSNotificationCenter defaultCenter] postNotificationName:@"movePopups" object:nil]; 

을 다음 다시 UIPopover을 제어 내 홈 스크린 컨트롤러에, 나는 청취자를 추가 :

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(movePopUpToRightLocation) 
              name:@"movePopups" 
              object:nil];  

init. 좋은 프로그래밍 연습을위한 당신의 dealloc에서 리스너를 제거하기 위해 반드시 기억 될 : 나는 키보드가 사라 알림을받을 때마다 그럼

[[NSNotificationCenter defaultCenter] removeObserver:self]; 

, 나는 팝 오버가에서 나타 버튼에 대한 참조를 가져, 그냥 그것에서 직접 표시 다시이 :

-(void)movePopUpToRightLocation { 
NSLog(@"move pop up to right location"); 
if (morePopUp) { 
    UIBarButtonItem *barButtonItem = (UIBarButtonItem *)[[bottomToolBar items] objectAtIndex:0]; 
    [morePopUp presentPopoverFromBarButtonItem:barButtonItem 
         permittedArrowDirections:UIPopoverArrowDirectionDown 
             animated:YES];    
} 

}

내가하는 그것이 팝업 어떤 검사를 추가하지 않은,하지만 난이 쉽게 할 수있는 나는 팝 오버의 1 개 이상의 유형이있는 경우/그 버튼이 나타납니다. 그러나 이것이 당신이 갈 수있는 기본 전제입니다.

희망이 있습니다.

+0

덕분에 오메 버튼을 Hthe 가로 방향에있을 때 여전히 아이폰 OS 4에서 재현 될 문제! 이것은 내가 확신하는 사람에게 도움이됩니다. – paranoidroid

1

UIKeyboardDidHideNotification에 이니셜 라이저의 어딘가에 등록 할 수도 있습니다.

- (void)movePopoverBack:(id)sender { 
    if ([self.settingsPopoverController isPopoverVisible]) { 
     [self performSelector:@selector(hidePopover) withObject:nil afterDelay:0.1]; 
     [self performSelector:@selector(movePopoverBack) withObject:nil afterDelay:0.5]; 
    } 
} 

- (void)hidePopover { 
    [self.settingsPopoverController dismissPopoverAnimated:YES]; 
} 

- (void)movePopoverBack { 
    [self.settingsPopoverController 
    presentPopoverFromBarButtonItem:self.bottomToolbar.settingsButton 
    permittedArrowDirections:UIPopoverArrowDirectionDown 
    animated:YES]; 
} 

나는 지연없이 작업을하지 않았다, 그러나 이것은 내 현재 프로젝트에 대한 허용 될 것으로 보인다 :

[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movePopoverBack:) name:UIKeyboardDidHideNotification object:nil]; 

이 코드는 팝 오버를 다시 이동합니다. 누군가가 도움이되기를 바랍니다.

0

뒤로 단추를 누른 후 검색 필드에 resignFirstResponder (예 : viewDidDisappear)을 수동으로 호출해야합니다.

이 도움이 될 것입니다,하지만 장치가 왼쪽

관련 문제