[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를 가지고 상상 MyNavController
과 A
루트 뷰 컨트롤러로. 이제 푸시 세그를 사용하여에 B
. 이제 내비게이션 컨트롤러의 viewControllers
배열 에 A와 B가 있고 B가 보입니다. 지금 당신은 선물C
모달 합니다.
풀기 segue를 사용하면 기본적으로 모달 segue를 “실행 취소”하여 “뒤로” (예 : 모달 표시 뷰 컨트롤러 C
를 해제) 풀 수 있습니다 B
. 루트 뷰 컨트롤러까지 다시 풀 수 있습니다.A
모달 segue와 push segue를 모두 실행 취소 .
풀기 segue를 사용하면 쉽게 추적 할 수 있습니다. 예를 들어 iOS 6 이전에는 제시된 뷰 컨트롤러를 해제하는 가장 좋은 방법은 제시된 뷰 컨트롤러를 제시된 뷰 컨트롤러의 대리자로 설정 한 다음 사용자 정의 대리자 메서드를 호출하여 presentViewController를 닫는 것 입니다. 귀찮고 복잡한 소리? 그렇습니다. 그것이 긴장을 푸는 segues가 좋은 이유입니다.
답변
여기에 다른 답변에서 언급되지 않은 것은 초기 segue의 출처를 모르는 경우 풀기 처리 방법입니다. 예를 들어, 두 개의 서로 다른 뷰 컨트롤러 ( A 및 B ) 에서 모달로 표시 하는 도움말 뷰 컨트롤러 ( H )가 있다고 가정합니다 .
A → H
B → H
올바른 뷰 컨트롤러로 돌아가도록 풀기 segue를 어떻게 설정합니까? 대답은 같은 이름으로 A 와 B 에서 풀기 동작을 선언하는 것입니다 .
// 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이 변경되었습니다.