0

UINavigationController가 있습니다. UIModalPresentationPageSheet 프리젠 테이션 스타일로보기 컨트롤러를 푸시합니다.Objective-C - 양식 시트와 페이지 시트를 동시에 닫으십시오.

이 페이지 시트의보기 컨트롤러 내에서 UIModalPresentationFormSheet 스타일로보기 컨트롤러를 제공합니다.

사용자가 양식 시트의 완료 버튼을 누르면 양식 시트와 페이지 시트를 닫습니다.

-(IBAction)onDone:(id)sender 
{ 
    if(self->delegate && [self->delegate respondsToSelector:self->actionSelector]) 
    { 
    [self->delegate performSelector:self->actionSelector withObject:[NSString stringWithString:self.textView.text]]; 
    } 

    [self dismissViewControllerAnimated:YES completion:nil]; 
} 

대리인이 페이지 시트의 뷰 컨트롤러, 그리고 선택에, 나는 페이지 인쇄 기각 : : 나는 그것을 실행하면

[self dismissViewControllerAnimated:YES completion:nil]; 

을 완료 버튼에 동작에서

내가 얻을 :

Warning: Attempt to dismiss from view controller <UINavigationController: 0xa9381d0> while a presentation or dismiss is in progress! 

내가 왜 이런 일 볼 수 - 선택기가되기 전에 호출되기 때문에 양식보기가 닫혀 있지만이 문제를 해결하는 가장 좋은 방법은 모르겠다.

나는 onDone에서 닫기를 제거하려고 시도하고 선택기 호출 (애니메이션 : 양식 시트에 대해 NO)을 사용하여 모두 닫기를 호출하고 작동하는 것처럼 보입니다. 그러나 이것이 방법 일지는 모르겠습니다. 나는 그것을 고치기 위해 접근해야한다.

답변

1

페이지 시트에 dismissViewControllerAnimated : completion :을 호출 해보십시오. Apple의 문서에 따르면 :

"여러 개의 뷰 컨트롤러를 연속적으로 제공하여 스택에있는 뷰 컨트롤러에서이 메서드를 호출하면 바로 위의 자식 뷰 컨트롤러와 모든 뷰 컨트롤러가 닫힙니다 이 경우 최상위 뷰만 애니메이션 방식으로 해제되고 모든 중간 뷰 컨트롤러는 스택에서 간단히 제거됩니다 최상위 뷰는 모달 전환 스타일을 사용하여 해제됩니다. 스택의 다른 하위보기 컨트롤러에서 사용하는 스타일에서. "

그 다음 dismissViewControllerAnimated에서 완료 핸들러 인수를 사용해야합니다, 당신이 원하는 정확하게 동작 아닌 경우 : 완료 : 다음, 블록 전달 완료 핸들러에서 다른 뷰 컨트롤러를 닫 예 :

[formSheetViewController dismissViewControllerAnimated:YES completion:^{ 
    [pageSheetViewController dismissViewControllerAnimated:YES competion:nil]; 
} 

정말로, 페이지 시트를 무시하는 것이 당신을 위해 속임수를 써야한다고 생각합니다. 완료 핸들러가 작동하는 방식을 이해하는 것은 여전히 ​​좋은 일입니다. 작업이 완료되면 작업을 수행 할 수 있습니다. 매우 편리합니다.