[ios] 프로그래밍 방식으로 Unwind segue를 수행하는 방법은 무엇입니까?

스토리 보드를 사용하면 매우 쉽습니다. 액션을 “종료”로 드래그하면됩니다. 그러나 내 코드에서 어떻게 호출해야합니까?



답변

  1. 수동 세구를 작성하십시오 ( ctrl파일 소유자에서 -drag하여 종료).
  2. 녹색 EXIT 버튼 아래 왼쪽 컨트롤러 메뉴에서 선택하십시오.

녹색 EXIT 버튼 아래 왼쪽 컨트롤러 메뉴에서 선택하십시오

긴장을 풀려면 Segue의 이름을 삽입하십시오.

그런 다음, - (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender.당신의 말과 함께 확인하십시오.


답변

Objective C와 Swift에 대한 완전한 대답은 다음과 같습니다.

1) IBAction목적지 뷰 컨트롤러에서 풀기 segue를 만듭니다 (segue하려는 위치). 구현 파일의 아무 곳이나.

// Objective C

    - (IBAction)unwindToContainerVC:(UIStoryboardSegue *)segue {

    }

// Swift

 @IBAction func unwindToContainerVC(segue: UIStoryboardSegue) {

    }

2) 소스 뷰 컨트롤러 (원하는 컨트롤러)에서 “활동 이름”에서 ⌃ + 드래그하여 종료합니다. 팝업의 1 단계에서 생성 된 풀기 segue가 표시되어야합니다. 표시되지 않으면 1 단계를 검토하십시오. 팝업에서 unwindToContainerVC :를 선택하거나 소스 컨트롤러를 unwind IBAction에 연결하기 위해 메소드 이름을 지정하십시오.

여기에 이미지 설명을 입력하십시오

3) 스토리 보드의 소스 뷰 컨트롤러 문서 개요 (아래 근처에 나열 됨)에서 segue를 선택하고 식별자를 지정하십시오 .

여기에 이미지 설명을 입력하십시오

4) 소스 보기 컨트롤러 에서이 메소드를 사용 하여 해제 해제 segue 이름을 대체하여 해제 해제 segue를 호출하십시오 .

// 목표 C

[self performSegueWithIdentifier:@"unwindToContainerVC" sender:self];

// 빠른

self.performSegueWithIdentifier("unwindToContainerVC", sender: self)

NB. unwind 메서드에서 segue 매개 변수의 sourceViewController 속성을 사용하여 소스 컨트롤러의 노출 된 속성에 액세스하십시오. 또한 프레임 워크가 소스 컨트롤러 해제를 처리합니다. 이를 확인하려면 소스 컨트롤러에 dealloc 메소드를 추가하고 일단 종료되면 실행되어야하는 로그 메시지를 추가하십시오. dealloc이 실행되지 않으면 유지주기가있을 수 있습니다.


답변

bradleygriffith대답은 훌륭했습니다. 10 단계를 거쳐 단순화를위한 스크린 샷을 만들었습니다. 이것은 Xcode 6의 스크린 샷입니다.

  1. 주황색 아이콘에서 빨간색 끝내기 아이콘으로 Control- 드래그하면보기에 아무 작업 / 버튼없이 풀기가 해제됩니다.

여기에 이미지 설명을 입력하십시오

  1. 그런 다음 unwind segue사이드 바에서를 선택하십시오 .

여기에 이미지 설명을 입력하십시오

  1. Segue 식별자 문자열을 설정하십시오.

여기에 이미지 설명을 입력하십시오

  1. 코드에서 해당 식별자에 액세스하십시오.
[self performSegueWithIdentifier:@"unwindIdentifier" sender:self];


답변

나는 [self dismissViewControllerAnimated: YES completion: nil];당신을 부름으로 돌려 보낼 것을 사용 했다 ViewController.


답변

Unwind Segue에 대한 Apple 기술 노트의 텍스트 인용 : 프로그래밍 방식으로 만 트리거되는 unwind segue를 추가하려면 장면의보기 컨트롤러 아이콘에서 종료 아이콘으로 control + 드래그 한 다음 팝업 메뉴에서 새로운 segue에 대한 unwind 액션을 선택하십시오.

기술 노트 링크


답변

위의 Vishal Chaudhry의 답변이 저에게 효과적이었습니다. 또한 다음을 사용하여 수동으로 seque를 트리거하기 위해 추가 할 것입니다.

[self performSegueWithIdentifier:@"mySegueName" sender:self];

ViewController 내에서 스토리 보드의 ViewController 장면과 RHS의 속성보기에서 풀기 segue를 선택해야합니다. 식별자 필드에 코드에서 참조하는 이름이 포함되어 있는지 확인합니다 (위 예의 “mySegueName”). ).

이 단계를 생략하면 위의 행에서 seque 이름을 알 수 없다는 예외가 발생합니다.


답변

관심있는 사람들을 위해 ios6 이전 버전에서 작동하는 이전 버전과 호환되는 솔루션 :

- (void)unwindToViewControllerOfClass:(Class)vcClass animated:(BOOL)animated {

    for (int i=self.navigationController.viewControllers.count - 1; i >= 0; i--) {
        UIViewController *vc = [self.navigationController.viewControllers objectAtIndex:i];
        if ([vc isKindOfClass:vcClass]) {
            [self.navigationController popToViewController:vc animated:animated];
            return;
        }
    }
}