[ios] Unwind segue는 무엇이며 어떻게 사용합니까?

iOS 6 및 Xcode 4.5에는 “Unwind Segue”라는 새로운 기능이 있습니다.

풀기 segue를 사용하면 스토리 보드에서 기존 장면 인스턴스로 전환 할 수 있습니다

Xcode 4.5 릴리스 노트의이 간단한 항목 외에도 UIViewController에는 몇 가지 새로운 메소드가있는 것 같습니다.

- (BOOL)canPerformUnwindSegueAction:(SEL)action fromViewController:(UIViewController *)fromViewController withSender:(id)sender
- (UIViewController *)viewControllerForUnwindSegueAction:(SEL)action fromViewController:(UIViewController *)fromViewController withSender:(id)sender
- (UIStoryboardSegue *)segueForUnwindingToViewController:(UIViewController *)toViewController fromViewController:(UIViewController *)fromViewController identifier:(NSString *)identifier

풀기 segue는 어떻게 작동하며 무엇을 사용할 수 있습니까?



답변

간단히 말해서

언 와인드 SEGUE (라고도 종료 SEGUE는 (당신이 탐색 모음에서 탐색 항목을 불쑥 들어 갔던 팝 오버를 폐쇄 또는 모달 발표 뷰 컨트롤러를 기각 것처럼)) 푸시, 모달 또는 팝 오버 segues를 탐색 뒷면에 사용할 수 있습니다. 또한 하나의 풀기 동작으로 탐색 계층에서 여러 단계를 “뒤로 이동”하는 것과 같이 일련의 푸시 / 모달 / 팝 오버 segue를 실제로 풀 수 있습니다.

풀기 segue를 수행 할 때는 풀려는 뷰 컨트롤러의 작업 방법 인 작업을 지정해야합니다.

목표 -C :

- (IBAction)unwindToThisViewController:(UIStoryboardSegue *)unwindSegue
{
}

빠른:

@IBAction func unwindToThisViewController(segue: UIStoryboardSegue) {
}

이 조치 방법의 이름은 스토리 보드에서 풀기 segue를 작성할 때 사용됩니다. 또한이 메소드는 unwind segue가 수행되기 직전에 호출됩니다. 전달 된 UIStoryboardSegue파라미터 에서 소스 뷰 컨트롤러 를 가져 와서 segue를 시작한 뷰 컨트롤러와 상호 작용할 수 있습니다 (예 : 모달 뷰 컨트롤러의 속성 값 가져 오기). 이러한 관점에서, 상기 방법은 유사한 기능으로서 갖고 prepareForSegue:의 방법 UIViewController.

iOS 8 업데이트 : Unwind segue는 Show and Show Detail 과 같은 iOS 8의 적응 형 segue 와도 작동 합니다.

네비게이션 컨트롤러와 3 개의 자식 뷰 컨트롤러가있는 스토리 보드를 만들어 보자.

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

Green View Controller에서 Red View Controller로 되감기 (다시 탐색) 할 수 있습니다. 파란색에서 녹색을 통해 녹색 또는 빨간색으로 긴장을 풀 수 있습니다. 당신이 빨간색과 녹색으로 특수 액션 메소드를 추가해야합니다 풀기 사용하려면, 여기에 예하면 레드의 조치 방법은 다음과 같다 :

목표 -C :

@implementation RedViewController

- (IBAction)unwindToRed:(UIStoryboardSegue *)unwindSegue
{
}

@end

빠른:

@IBAction func unwindToRed(segue: UIStoryboardSegue) {
}

동작 방법이 추가 된 후, 종료 아이콘으로 드래그하여 스토리 보드에서 풀기 segue를 정의 할 수 있습니다. 버튼을 눌렀을 때 녹색에서 빨간색으로 풀리려고합니다.

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

풀려는 뷰 컨트롤러에 정의 된 작업을 선택해야합니다.

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

탐색 스택에서 “2 단계 떨어져”있는 파란색에서 빨간색으로 해제 할 수도 있습니다. 열쇠는 올바른 풀기 동작을 선택하는 것입니다.

unwind segue가 수행되기 전에 action 메소드가 호출됩니다. 이 예에서는 녹색과 파란색 모두에서 풀기 segue를 빨간색으로 정의했습니다. UIStoryboardSegue 매개 변수를 통해 조치 메소드에서 해제 소스에 액세스 할 수 있습니다.

목표 -C :

- (IBAction)unwindToRed:(UIStoryboardSegue *)unwindSegue
{
    UIViewController* sourceViewController = unwindSegue.sourceViewController;

    if ([sourceViewController isKindOfClass:[BlueViewController class]])
    {
        NSLog(@"Coming from BLUE!");
    }
    else if ([sourceViewController isKindOfClass:[GreenViewController class]])
    {
        NSLog(@"Coming from GREEN!");
    }
}

빠른:

@IBAction func unwindToRed(unwindSegue: UIStoryboardSegue) {
    if let blueViewController = unwindSegue.sourceViewController as? BlueViewController {
        println("Coming from BLUE")
    }
    else if let redViewController = unwindSegue.sourceViewController as? RedViewController {
        println("Coming from RED")
    }
}

풀림은 푸시 / 모달 세구의 조합을 통해 작동합니다. 예를 들어, 모달 segue를 가진 또 다른 Yellow view 컨트롤러를 추가했다면, 한 번에 Yellow에서 Red로 다시 풀 수 있습니다.

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

코드에서 풀기

뷰 컨트롤러의 종료 기호에 무언가를 드래그하여 풀기 segue를 정의하면 문서 개요에 새로운 segue가 나타납니다.

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

segue를 선택하고 Attributes Inspector로 이동하면 “식별자”속성이 표시됩니다. 이것을 사용하여 segue에 고유 식별자를 제공하십시오.

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

그 후, 다른 segue와 마찬가지로 unwind segue를 코드에서 수행 할 수 있습니다.

목표 -C :

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

빠른:

performSegueWithIdentifier("UnwindToRedSegueID", sender: self)


답변

StoryBoard에서 unwind segue를 사용하는 방법은 …

1 단계)

풀려는 뷰 컨트롤러의 코드로 이동하여 다음 추가하십시오.

목표 -C

- (IBAction)unwindToViewControllerNameHere:(UIStoryboardSegue *)segue {
    //nothing goes here
}

Obj-C의 .h 파일에도이 메소드를 선언하십시오

빠른

@IBAction func unwindToViewControllerNameHere(segue: UIStoryboardSegue) {
    //nothing goes here
}

2 단계)

스토리 보드에서 긴장을 풀고 자하는 뷰로 이동하여 소스 뷰의 오른쪽 상단에있는 작은 오렌지색 “EXIT”아이콘까지 버튼이나 다른 것에서 segue를 드래그하십시오.

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

이제 “-unwindToViewControllerNameHere”에 연결하는 옵션이 있어야합니다.

그게 다야, 버튼을 눌렀을 때 segue가 풀린다.


답변

풀기 segues는 여러 segue를 통해 “현재”view controller에 도착한 일부 view controller로 “돌아가는”데 사용됩니다.

당신이 뭔가 a를 가지고 상상 MyNavControllerA루트 뷰 컨트롤러로. 이제 푸시 세그를 사용하여에 B. 이제 내비게이션 컨트롤러의 viewControllers배열 에 A와 B가 있고 B가 보입니다. 지금 당신은 선물C 모달 합니다.

풀기 segue를 사용하면 기본적으로 모달 segue를 “실행 취소”하여 “뒤로” (예 : 모달 표시 뷰 컨트롤러 C를 해제) 풀 수 있습니다 B. 루트 뷰 컨트롤러까지 다시 풀 수 있습니다.A모달 segue와 push segue를 모두 실행 취소 .

풀기 segue를 사용하면 쉽게 추적 할 수 있습니다. 예를 들어 iOS 6 이전에는 제시된 뷰 컨트롤러를 해제하는 가장 좋은 방법은 제시된 뷰 컨트롤러를 제시된 뷰 컨트롤러의 대리자로 설정 한 다음 사용자 정의 대리자 메서드를 호출하여 presentViewController를 닫는 것 입니다. 귀찮고 복잡한 소리? 그렇습니다. 그것이 긴장을 푸는 segues가 좋은 이유입니다.


답변

여기에 다른 답변에서 언급되지 않은 것은 초기 segue의 출처를 모르는 경우 풀기 처리 방법입니다. 예를 들어, 두 개의 서로 다른 뷰 컨트롤러 ( AB ) 에서 모달로 표시 하는 도움말 뷰 컨트롤러 ( H )가 있다고 가정합니다 .

AH
BH

올바른 뷰 컨트롤러로 돌아가도록 풀기 segue를 어떻게 설정합니까? 대답은 같은 이름으로 AB 에서 풀기 동작을 선언하는 것입니다 .

// put in AViewController.swift and BViewController.swift
@IBAction func unwindFromHelp(sender: UIStoryboardSegue) {
    // empty
}

이 방법으로 풀면 뷰 컨트롤러 ( A 또는 B )가 segue를 시작하고 다시 돌아갑니다.

즉, SEGUE가 오는 곳 기술과 언 와인드 행동의 생각 에서 오히려가는 곳보다.


답변

스위프트 iOS :

1 단계 :이 방법을 MASTER 컨트롤러보기에 정의하십시오. 다시 가고 싶은 곳 :

//pragma mark - Unwind Seques
@IBAction func goToSideMenu(segue: UIStoryboardSegue) {

    println("Called goToSideMenu: unwind action")

}

2 단계 : (StoryBoard) SLAVE / CHILD EXIT 버튼을 마우스 오른쪽 버튼으로 클릭하고 “goToSideMenu”를 선택하십시오. 연결 조치 버튼을 클릭하면 마스터 컨트롤러보기로 돌아갑니다.

여기에 이미지 설명을 입력하십시오
3 단계 : 빌드 및 실행 …


답변

예를 들어 viewControllerB에서 viewControllerA로 이동하면 아래의 viewControllerA에서 대리자가 호출하고 데이터가 공유됩니다.

@IBAction func unWindSeague (_ sender : UIStoryboardSegue) {
        if sender.source is ViewControllerB  {
            if let _ = sender.source as? ViewControllerB {
                self.textLabel.text = "Came from B = B->A , B exited"
            }
            
        }

}
  • Seague 소스 뷰 컨트롤러 풀기 (Exit Button을 VC의 종료 아이콘에 연결하고 unwindseague에 연결해야합니다.

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

  • SeaController 완료-> viewControllerA의 TextLabel이 변경되었습니다.

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


답변