4

Xcode 4.5와 새로운 iOS 6 기능을 사용하여 각본을 푸십시오.Xcode Storyboard에서 Unwind Segue를 사용하여 Popover 닫기

(IE가 팝 오버 기각) I는 SEGUE를 푸는 타겟 정의한이 방법
- (IBAction)configChartTapped:(id)sender 
{ 
    if (self.popover.isPopoverVisible) { 

     [self.popover dismissPopoverAnimated:YES]; 

    } else { 
     UINavigationController *chartConfigNavigationController = [self.storyboard instantiateViewControllerWithIdentifier:@"GrowthChartNavigationController"]; 

     ConfigChartTypeViewController *configChartTypeViewController = (ConfigChartTypeViewController*) chartConfigNavigationController.topViewController; 

     self.popover = [[UIPopoverController alloc]initWithContentViewController:chartConfigNavigationController]; 
     self.popover.popoverContentSize = CGSizeMake(320, 500); 
     self.popover.delegate = self; 

     [self.popover presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
    } 
} 

다음 ...

: I는 바 버튼 항목에서 프로그램 제시 팝 오버 내부 네비게이션 뷰 컨트롤러를 제시하고
- (IBAction)cancelConfig:(UIStoryboardSegue *)segue 
{ 
    // 
} 

... 탐색보기 컨트롤러의 탐색 모음에서 취소 버튼에 연결했습니다.

취소 바 버튼을 cancelConfig 버튼에 연결하면 Xcode에서 문제가 없습니다.

그러나 코드를 실행할 때 Xcode 4.5가 segues를 풀 때 (릴리스 문서에 따라) 팝업 해제를 지원해야하지만 취소 버튼을 클릭해도 아무런 변화가 없습니다.

무엇을 놓쳤습니까?

감사합니다.

+0

안녕하세요, 해결책을 찾으셨습니까? 나도 여기에 갇혀있어 – dan

+0

Dan, 불행히도 나는이 문제에 대한 해결책을 아직 찾지 못했다. 나는 아직도 평범한 대표단을 사용하고 있으며, Apple이 곧이 문제를 고칠 수 있기를 희망합니다. 해결책을 찾았 으면 알려주십시오. – AlexR

답변

5

언 와인드 세그멘트는 먼저 부모 뷰 컨트롤러에게 올바른 unwind 메소드를 찾을 때까지 segue를 통해 제공된 뷰 컨트롤러 체인을 걸어 내려고 요청하여 런타임 검색을 사용합니다. 그러나 Popover가 Popover Segue가 아닌 프로그래밍 방식으로 생성 된 이후로 여기에는 체인이 없습니다.

부모보기 컨트롤러에 다시 연결 고리가 없으므로 콜백이 발생하지 않습니다. Unwind segues는 추상화 된 위임 형식이므로 대리자를 설정하지 않고 콜백을받지 않는 것과 비슷합니다.

해결 방법은 configChartTapped: 메서드를 사용하여 프로그래밍 방식으로 인터페이스 작성기를 사용하지 않고 인터페이스 작성기에서 단락 기호를 사용하여 팝업을 만드는 것입니다.

단계 : 보기 컨트롤러 제시 있는 바 버튼 항목에서

우선 제어 드래그 뷰 컨트롤러를 제공하고 팝 오버에 SEGUE 선택

enter image description here

보기 컨트롤러가있는 경우 prepareForSegue:을 구현하여 팝 오버 컨트롤러 :

- (void)prepareForSegue:(UIStoryboardPopoverSegue *)segue 
       sender:(id)sender { 
    self.popover = segue.popoverController; 
} 

은 다음과 유사한 표시/숨기기 동작 configChartTapped:에 을 복원 shouldPerformSegueWithIdentifier: 구현은 다음 보기를 제시하기위한

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender { 
    if (self.popover.isPopoverVisible) { 
     [self.popover dismissPopoverAnimated:YES]; 
     return NO; 
    } else { 
     return YES; 
    } 
} 

마지막으로, 인터페이스 빌더에서 올바른 팝 오버 콘텐츠 크기를 설정 제어기 :

enter image description here

팝업창에서 취소 버튼을 누를 때 cancelConfig:까지 풀어 볼 수 있으며, 해당 버튼을 누르면 해당 팝업을 표시하거나 숨길 수 있습니다.

+0

답변을 확인하는 가장 쉬운 방법은 http://stackoverflow.com/questions/28247727/unwind-segue-doesnt-dismiss-adaptive-popover-presentation-when-not-modal입니다. – DogCoffee

관련 문제