언바인드 세그의 용도와 사용법은 무엇입니까?
iOS 6 및 Xcode 4.5에는 "Unwind Segue"라는 새로운 기능이 있습니다.
세그먼트 해제를 통해 스토리보드의 기존 장면 인스턴스로 이행 가능
Xcode 4.5 릴리즈 노트의 간단한 엔트리 외에 UIView Controller에는 몇 가지 새로운 방법이 있는 것 같습니다.
- (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
unwind segues는 어떻게 작동하며 어떤 용도로 사용할 수 있습니까?
간단히 말하면
unwind segue(종료 segue라고도 함)를 사용하여 푸시, 모달 또는 팝오버 세그먼트를 다시 탐색할 수 있습니다(네비게이션 바에서 네비게이션 항목을 팝업하거나 팝오버를 닫거나 모듈로 표시된 뷰 컨트롤러를 해제한 것처럼).또한 하나의 푸시/모달/팝오버 세그먼트뿐만 아니라 일련의 푸시/모달/팝오버 세그먼트를 통해 실제로 풀 수 있습니다. 예를 들어, 한 번의 풀림 작업으로 네비게이션 계층의 여러 단계를 "뒤로 돌아가기"할 수 있습니다.
언바인드를 수행할 때는 언바인드할 뷰 컨트롤러의 액션 메서드인 액션을 지정해야 합니다.
목표-C:
- (IBAction)unwindToThisViewController:(UIStoryboardSegue *)unwindSegue
{
}
신속:
@IBAction func unwindToThisViewController(segue: UIStoryboardSegue) {
}
이 수행 방법의 이름은 스토리보드에서 언바인드 segue를 작성할 때 사용됩니다.또, 언와인드 세게가 행해지기 직전에 이 방법을 호출한다. 뷰 는 전달된 소스 뷰 컨트롤러에서 수 .UIStoryboardSegue는 이 이 는 와 같은 기능을 있습니다.prepareForSegue:의 of의 UIViewController.
iOS 8 업데이트:Unwind segues는 Show(표시) 및 Show Detail(상세보기)과 같은 iOS 8의 적응형 세그먼트(segues)에서도 작동합니다.
예
네비게이션 컨트롤러와 3개의 아이 뷰 컨트롤러가 있는 스토리보드를 준비하겠습니다.

Green View Controller에서 Red View Controller로 언바인드(되돌아가기)할 수 있습니다.파란색에서 녹색 또는 녹색을 통해 빨간색으로 전환할 수 있습니다.언와인드를 활성화하려면 Red 및 Green에 특수 액션 메서드를 추가해야 합니다. 예를 들어 빨간색 액션 메서드는 다음과 같습니다.
목표-C:
@implementation RedViewController
- (IBAction)unwindToRed:(UIStoryboardSegue *)unwindSegue
{
}
@end
신속:
@IBAction func unwindToRed(segue: UIStoryboardSegue) {
}
액션 메서드가 추가된 후 [Exit]아이콘으로 컨트롤을 드래그하여 스토리보드에서 언바인드세그를 정의할 수 있습니다.버튼을 누르면 녹색에서 빨간색으로 전환됩니다.

해제할 뷰 컨트롤러에 정의된 액션을 선택해야 합니다.

또한 파란색에서 빨간색(네비게이션 스택에서 "2단계 떨어진" 위치)을 해제할 수도 있습니다.중요한 것은 올바른 언인드 액션을 선택하는 것입니다.
언와인드 시게가 실행되기 전에 액션 메서드를 호출한다.이 예에서는 unwind segue를 Green과 Blue에서 Red로 정의했습니다.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 뷰 컨트롤러를 추가하면 한 번에 Yellow에서 Red까지 풀 수 있습니다.

코드로부터의 언와
뷰 컨트롤러의 종료 기호로 컨트롤 드래그하여 언바인드를 정의하면 새 segue가 문서 개요에 나타납니다.

segue를 선택하고 Attributes Inspector로 이동하면 "Identifier" 속성이 표시됩니다.이를 통해 segue에 고유 식별자를 지정할 수 있습니다.

그 후 unwind segue는 다른 segue와 마찬가지로 코드에서 실행할 수 있습니다.
목표-C:
[self performSegueWithIdentifier:@"UnwindToRedSegueID" sender:self];
신속:
performSegueWithIdentifier("UnwindToRedSegueID", sender: self)
StoryBoard에서 세그먼트 해제 사용 방법에 관한 한...
순서 1)
언바인드할 뷰 컨트롤러의 코드로 이동하여 다음 내용을 추가합니다.
목표-C
- (IBAction)unwindToViewControllerNameHere:(UIStoryboardSegue *)segue {
//nothing goes here
}
Obj-C의 .h 파일에서도 이 메서드를 선언하십시오.
재빠르다
@IBAction func unwindToViewControllerNameHere(segue: UIStoryboardSegue) {
//nothing goes here
}
순서 2)
스토리보드에서 풀고 싶은 뷰로 이동하여 버튼이나 기타에서 작은 오렌지색 "EX"까지 segue를 드래그하기만 하면 됩니다.소스 뷰의 오른쪽 상단에 있는 IT" 아이콘을 참조하십시오.
"-unwindToViewControllerNameHere" 에 접속하는 옵션이 표시됩니다.
바로 그거야, 버튼을 누르면 시그가 풀릴 거야.
unwind segues는 일부 뷰 컨트롤러로 "돌아가기" 위해 사용되며, 여기서 여러 세그먼트를 통해 "현재" 뷰 컨트롤러로 이동합니다.
있다고 상상해 보세요.MyNavControllerA루트 뷰 컨트롤러로 사용합니다.이제 푸쉬세그를 사용해서B가 A와 B로 있습니다.viewControllersB자형입니다. 이번에는 , 신, 신, 당, 당, 당, now, now, now, now, now을 제시C모듈러로
segues를 하면 unwind segues에서 "back을 unwind segues, unwind segues에서 unwind할 수 .C로.B(즉, 모듈러로 표시된 뷰 컨트롤러를 해제), 기본적으로 모듈러 segue를 "삭제"합니다.루트 뷰 컨트롤러까지 풀 수 있습니다.A모달 시가와 푸시 시가를 모두 해제합니다.
세그먼트(segues)를 풀면 역추적이 쉬워집니다.예를 들어 iOS 6 이전 버전에서는 프레젠테이션 뷰 컨트롤러를 프레젠테이션 뷰 컨트롤러의 위임자로 설정하고 커스텀 위임 메서드를 호출하면 presented View Controller가 해제됩니다.번거롭고 복잡하게 들리나요?그랬다.그래서 풀린 세그들이 좋은 거야
여기 있는 다른 답변에서는 언급되지 않은 것이 첫 번째 segue가 어디서 시작되었는지 모를 때 긴장을 푸는 방법에 대한 것입니다. 이것은 훨씬 더 중요한 사용 사례입니다.예를 들어 Help View컨트롤러(H)가 2개의 다른 뷰컨트롤러(A 및 B)에서 모듈러로 표시되어 있다고 합니다.
A → H
B → H
올바른 뷰 컨트롤러로 돌아가도록 언와인드 세그를 설정하려면 어떻게 해야 합니까?정답은 A와 B에서 같은 이름으로 언바인드 액션을 선언하는 것입니다.예를 들어 다음과 같습니다.
// put in AViewController.swift and BViewController.swift
@IBAction func unwindFromHelp(sender: UIStoryboardSegue) {
// empty
}
이렇게 하면 언와인드(unwind)는 segue를 시작한 뷰 컨트롤러(A 또는 B)를 찾아 원래대로 돌아갑니다.
즉, 언와인드 액션은 segue의 행선지가 아닌, segue의 행선지를 나타내는 것으로 생각해 주세요.
신속한 iOS:
스텝 1: 마스터 컨트롤러 뷰에서 이 방법을 정의합니다.되돌아가고 싶은 장소:
//pragma mark - Unwind Seques
@IBAction func goToSideMenu(segue: UIStoryboardSegue) {
println("Called goToSideMenu: unwind action")
}
순서 2: (StoryBoard) SLAVE/CHILD EXIT 버튼을 우클릭하여 [GoToSide Menu]를 선택합니다.이 버튼을 클릭하면 마스터 컨트롤러 뷰로 돌아갑니다.
순서 3: 빌드 및 실행...
예를 들어, viewController B에서 viewController A로 이동하면 viewController A 아래 대리자가 호출하여 데이터를 공유합니다.
@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 소스 뷰 컨트롤러를 언바인드합니다(종료 버튼을 VC의 종료 아이콘에 연결하고 언바인드에 연결해야 합니다).
- [ Unwind Seague Completed ]-> [ Text Label of view Controller A ]가 변경되었습니다.
언급URL : https://stackoverflow.com/questions/12561735/what-are-unwind-segues-for-and-how-do-you-use-them
'programing' 카테고리의 다른 글
| ssh 키를 생성하는 bash 스크립트의 "Enter" 키 누르기 자동화 (0) | 2023.04.11 |
|---|---|
| 모듈 또는 시트에 Excel-VBA 코드를 입력하시겠습니까? (0) | 2023.04.11 |
| .text, .value 및 .value2의 차이점은 무엇입니까? (0) | 2023.04.11 |
| SQL Server의 조건부 WHERE 절 (0) | 2023.04.11 |
| Bash에서 인덱스를 지정하지 않고 어레이에 새 요소 추가 (0) | 2023.04.11 |


