Programing

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

lottogame 2020. 3. 16. 08:11
반응형

프로그래밍 방식으로 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) 스토리 보드의 소스 뷰 컨트롤러 문서 개요에서 하단을 선택하고 (아래 근처에 나열 됨) 식별자를 지정하십시오 .

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

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

// 목표 C

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

// 빠른

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

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


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

주황색 아이콘에서 빨간색 끝내기 아이콘으로 Control- 드래그하면보기에서 아무 작업이나 버튼없이 풀기 기능을 만들 수 있습니다.

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

그런 다음을 선택하고 unwind segue코드에서 액세스 할 식별자를 설정 하십시오 .

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

코드에서

[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;
        }
    }
}

스위프트 4.2, Xcode 10+

스토리 보드를 통해 설정되지 않은 VC 로이 작업을 수행하는 방법을 궁금해하는 사람들을 위해 ( "프로그래밍 방식으로"+ "풀기 해제"를 검색 하여이 질문에 나오는 사람들).

프로그래밍 방식으로 풀기 segue를 설정할 수없는 경우 가장 간단한 유일한 프로그래밍 방식 솔루션은 다음을 호출하는 것입니다.

navigationController?.popToRootViewController(animated: true)

스택의 모든 뷰 컨트롤러가 루트 뷰 컨트롤러로 다시 나타납니다.


참고 : @Vadim의 답변이 View Controller 내에서 호출 된 수동 해제 해제 작업을 수행하려면 다음 명령을 입력해야합니다.

[self performSegueWithIdentifier:(NSString*) identifier sender:(id) sender];

재정의 된 클래스 메서드 viewDidAppear 내부 :

-(void) viewDidAppear:(BOOL) animated
{
    [super viewDidAppear: animated];

    [self performSegueWithIdentifier:@"SomeSegueIdentifier" sender:self];
}

viewDidLoad 또는 viewWillAppear 와 같은 다른 ViewController 메소드에 넣으면 무시됩니다.


스위프트 4 :

1. 풀기 원하는 컨트롤러 내에 segue를 사용 하여 @IBAction만듭니다 .

    @IBAction func unwindToVC(segue: UIStoryboardSegue) {

    }

2. 스토리 보드의 컨트롤러에서 ctrl +에서 분리 (풀기)하려는 경우 컨트롤러 기호에서 드래그하여 기호를 종료하고 앞에서 만든 방법을 선택합니다.

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

3. 이제 문서 개요에 "Unwind segue ...."라는 제목의 새로운 줄이 있음을 알 수 있습니다. 이제이 줄을 클릭하고 속성 관리자를 열어 식별자를 설정해야합니다 (제 경우에는 unwindSegueIdentifier ).

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

4. 거의 끝났습니다! 이제 풀기 원하는 뷰 컨트롤러를 열고 segue를 수행 할 메소드를 작성해야합니다. 예를 들어, 당신은 버튼을 추가 할 수 있습니다와 코드로 연결 @IBAction 그 후, 안쪽이 IBAction를 추가 perfromSegue (withIdentifier : 보낸 사람 : 방법 :

     @IBAction func unwindToSomeVCWithSegue(_ sender: UIButton) {
         performSegue(withIdentifier: "unwindSegueIdentifier", sender: nil)
     }

이것이 당신이해야 할 전부입니다!

참고 URL : https://stackoverflow.com/questions/12509422/how-to-perform-unwind-segue-programmatically

반응형