programing

언와인드 세그를 프로그래밍 방식으로 실행하는 방법

javajsp 2023. 4. 14. 21:11

언와인드 세그를 프로그래밍 방식으로 실행하는 방법

스토리보드를 사용하면 매우 간단합니다.작업을 "종료"로 끌기만 하면 됩니다.하지만 내 코드로 뭐라고 불러야 하지?

  1. 수동 segue(ctrl파일 소유자로부터 종료까지 드래그)를 작성합니다.
  2. 녹색 EXIT 버튼 아래의 Left Controller Menu(왼쪽 컨트롤러 메뉴)에서 선택합니다.

녹색 EXIT 버튼 아래의 왼쪽 컨트롤러 메뉴에서 선택합니다.

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

- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender.신분증을 제시해 주세요

다음은 Objective C와 Swift에 대한 완전한 답변입니다.

) 1) 을 합니다.IBAction세가풀다★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

// Objective C

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

    }

// Swift

 @IBAction func unwindToContainerVC(segue: UIStoryboardSegue) {

    }

2) 소스 뷰 컨트롤러(사용자가 선택한 컨트롤러)에서 "활동명"에서 ▲ + 드래그하여 종료합니다.1단계에서 작성한 unwind segue가 팝업으로 표시됩니다(표시되지 않으면 1단계 검토).unwind To Container를 선택합니다.VC: 팝업 또는 소스 컨트롤러를 언바인드 IBAtion에 연결하기 위한 메서드 이름을 지정합니다.

여기에 이미지 설명 입력

3) 스토리보드의 소스 뷰 컨트롤러의 문서 아웃라인에서 segue를 선택하고(아래쪽에 표시됨) 식별자를 부여합니다.

여기에 이미지 설명 입력

4) source view 컨트롤러에서 unwind segue를 호출하고 unwind segue 이름을 바꿉니다.

// 목표 C

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

// 신속

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

NB. 언바인드 메서드에서 segue 파라미터의 sourceViewController 속성을 사용하여 소스 컨트롤러에서 노출된 속성에 액세스합니다.또, 송신원컨트롤러의 해제는 프레임워크에 의해서 처리되는 것에 주의해 주세요.이 설정을 확인하려면 소스 컨트롤러에 할당 해제 메서드를 추가하고 로그 메시지가 표시되고 소스 컨트롤러가 종료된 후 실행됩니다.디알록이 실행되지 않으면 유지 사이클이 있을 수 있습니다.

bradleygriffith을 사용하다스텝 10을 진행해서 간단하게 스크린샷을 만들었습니다.X코드 6을 사용하다.

  1. 주황색 아이콘에서 빨간색 종료 아이콘으로 컨트롤을 드래그하여 뷰에서 작업/버튼 없이 언인드를 만듭니다.

여기에 이미지 설명 입력

  1. 다음 '먹다'를 합니다.unwind segue해 주세요.

여기에 이미지 설명 입력

  1. Segue Identifier 문자열을 설정합니다.

여기에 이미지 설명 입력

  1. 코드에서 해당 식별자에 액세스합니다.
[self performSegueWithIdentifier:@"unwindIdentifier" sender:self];

하였습니다.[self dismissViewControllerAnimated: YES completion: nil]; '부름'으로 .ViewController.

Unwind Segue에 대한 Apple 기술 노트의 텍스트를 인용합니다.프로그래밍 방식으로만 트리거되는 언바인드 작업을 추가하려면 씬(scene) 뷰 컨트롤러 아이콘에서 종료 아이콘으로 컨트롤+드래그한 다음 팝업 메뉴에서 새 segue를 선택한 다음 팝업 메뉴에서 새 segue에 대한 언바인드 액션을 선택합니다.

테크니컬 노트 링크

위의 Vishal Chaudhry의 답변은 나에게 효과가 있었다.또한 다음을 사용하여 수동으로 seque를 트리거하기 위해 추가합니다.

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

또한 ViewController 내에서 스토리보드 및 RHS의 속성 뷰에서 ViewController's Scene 아래의 언바인드 segue를 선택해야 합니다. Identifier 필드에 코드에서 참조하는 이름(위 예에서는 mySegueName)이 포함되어 있는지 확인합니다.

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

SWIFT 4:

1. segue가 포함된 @IBAtion을 만듭니다.컨트롤러 내부에 언인드할 경우:

    @IBAction func unwindToVC(segue: UIStoryboardSegue) {

    }

2. 스토리보드에서 컨트롤러 기호의 ctrl+drag에서 종료 기호로 선택하고(감기 해제) 이전에 작성한 방법을 선택합니다.

여기에 이미지 설명 입력

3. 문서 개요에 "Unwind segue..."라는 제목의 새로운 행이 있음을 알 수 있습니다.이 행을 클릭하여 속성 검사기를 열고 식별자를 설정합니다(내 경우 unwindSegueIdentifier).

여기에 이미지 설명 입력

4. 거의 다 했어!이제 풀려는 뷰 컨트롤러를 열고 segue를 수행할 메서드를 만들어야 합니다.예를 들어 버튼을 추가하고 @IBAtion을 사용하여 코드로 연결한 후 이 IBAtion add perfromSege(withIdentifier:sender:) 메서드 내에서 버튼을 추가할 수 있습니다.

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

그럼 그걸로 끝이야!

Swift 4.2, Xcode 10 이상

스토리보드를 통해 설정되지 않은 VC를 사용하여 이 작업을 수행하는 방법을 알고 싶은 분('프로그래머티컬' + 'unwind sege' 검색에서 이 질문을 받는 분)

언바인드 segue를 프로그래밍 방식으로 설정할 수 없기 때문에 가장 간단한 프로그래밍 방식 솔루션은 다음과 같이 호출하는 것입니다.

navigationController?.popToRootViewController(animated: true)

스택상의 모든 뷰 컨트롤러를 루트 뷰 컨트롤러로 팝백합니다.


네비게이션 스택에서 맨 위 뷰 컨트롤러만 팝업하려면 다음 명령을 사용합니다.

navigationController?.popViewController(animated: true)

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

참고로 @Vadim의 응답이 View 컨트롤러 내에서 호출된 수동 언바인드 seque 액션과 함께 작동하려면 다음 명령을 실행해야 합니다.

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

다음과 같이 오버라이드된 클래스 메서드 viewDidEpair 내부를 표시합니다.

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

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

viewDidLoad 또는 viewWillAppear와 같은 다른 ViewController 메서드에 배치하면 무시됩니다.

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