2012-03-16 4 views
2

설정 팝 오버가 있습니다. 그 popover에는 버튼 (More Info)이 있습니다. 사용자가 해당 버튼을 클릭하면 다른보기를 가져오고 해당 팝업을 닫으려고합니다.iOS에서 어떻게 팝업 오버 자체를 닫을 수 있습니까?

실제로 Popover 안에있는 추가 정보 버튼에서 어떻게합니까?

현재 나는 버튼을 눌러를 처리하는 기능이 있습니다

- (IBAction)showFullVersionInfo:(id)sender 
    { 
    [self dismissPopoverAnimated:YES]; 
    parent.settingsPopover = nil; 

    //need to show more Info... 

    } 

부모가 참조 'settingsPopover'는 팝 오버에 보유하고 나는 그것을 취소합니다.

+0

이 보이는 popover,하지만 다른보기를 표시하는 방법을 알고 싶습니까? 팝업보기 외부에있는 UI와 관련하여이보기를 표시하려는 위치/방법은 무엇입니까? – rickster

+0

@rickster 위의 코드는 popover를 제거하는 데는 효과가 없습니다 ... 여전히 작동 시키려고합니다. – milesmeow

답변

4

Popover 컨트롤러 내부에서이를 원하지 않습니다. Popover 컨트롤러는 Popover가 표시되거나 숨겨지는 방법 및 시점이 아닌 Popover의 내용 만 관리해야합니다.

상위 컨트롤러에서만 이러한 작업을 수행 할 수 있습니다. 그것을 보여준 (그리고 소유하고있는) 컨트롤러에서만 popover를 숨 깁니다.

귀하의 질문은 실제로 있어야합니다 : 사용자가 popover 내부에서 일부 작업을 수행했음을 부모 컨트롤러에 알리는 방법?

그리고 대답은 delegate입니다. 대리자를 정의하고 상위 컨트롤러에서 구현하고 popover 및 IBAction 호출 대리자 메서드에 전달합니다. 당신이 settingsPopover을 실행하는 기능에서 '부모'개체에서

0

가장 좋은 방법은 popoverControllerDidDismissPopover: 대리인 콜백에서 팝업을 해제하는 것입니다. 불행히도이 콜백은 dismissPopoverAnimated: 다음에 호출하지 않습니다. 예를 들어 popoverDidFinishWorking:이라는 또 다른 통합 콜백을 입력하여이 문제를 해결했습니다. 닫는 버튼이 두드려 졌을 때 Popover에서 소유자에게 보내십시오. 소유자가 popoverDidFinishWorking:이되면 popoverControllerDidDismissPopover:을 호출하고 popover (settingsPopover)를 숨기거나 해제합니다. 이 콜백에 다른 뷰를 표시 할 수도 있습니다. 어쨌든 그것은 귀하의 앱 디자인에 달려 있습니다.

+0

iOS에서는 정의되지 않은 항목에주의해야합니다. 앱은 이러한 이유로 거부됩니다. – mpemburn

+0

그래서 나는 운 좋은 사람이다. App은 App5tore에 1 년 이상 성공적으로 배치되었습니다. 실제로 그것은 "정의되지 않은 항목"이 아니라 좋은 App 디자인의 일부입니다. – SVGreg

0

, 당신은해야합니다

- (void) launchDismissSettingPopover { 
    if (settingPopover == nil) { 
     //Create an launch the popover 
    } else { 

     [self dismissPopoverAnimated:YES]; 
     // settingPopover will be nil in navigationController didShowViewController 
     //self.settingsPopover = nil; 
    } 
} 

당신은 self.navigationController.delegate을 가져야한다 = 자기 전에 부모 클래스에

-(void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated { 
    if (viewController == self && self.settingPopover != nil) { 

     //need to show more Info based on settingPopover info here 

      self.settingPopover = nil ; 
     } 
} 
당신은 아무 문제 기각이없는 것처럼

는 그런 다음 팝 오버 클래스 메서드에

- (IBAction)showFullVersionInfo:(id)sender 
    { 
    [parent launchDismissSettingPopover]; 
    } 
관련 문제