스토리 보드를 사용하면 매우 쉽습니다. 액션을 "종료"로 드래그하면됩니다. 그러나 내 코드에서 어떻게 호출해야합니까?
스토리 보드를 사용하면 매우 쉽습니다. 액션을 "종료"로 드래그하면됩니다. 그러나 내 코드에서 어떻게 호출해야합니까?
답변:
긴장을 풀려면 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) 스토리 보드의 소스 뷰 컨트롤러 문서 개요 (아래 근처에 나열 됨)에서 segue를 선택하고 식별자를 지정하십시오 .
4) 소스 보기 컨트롤러 에서이 메소드를 사용 하여 해제 해제 segue 이름을 대체하여 해제 해제 segue를 호출하십시오 .
// 목표 C
[self performSegueWithIdentifier:@"unwindToContainerVC" sender:self];
// 빠른
self.performSegueWithIdentifier("unwindToContainerVC", sender: self)
NB. unwind 메서드에서 segue 매개 변수의 sourceViewController 속성을 사용하여 소스 컨트롤러의 노출 된 속성에 액세스하십시오. 또한 프레임 워크가 소스 컨트롤러 해제를 처리합니다. 이를 확인하려면 소스 컨트롤러에 dealloc 메소드를 추가하고 일단 종료되면 실행되어야하는 로그 메시지를 추가하십시오. dealloc이 실행되지 않으면 유지주기가있을 수 있습니다.
(IBAction)unwindToContainerVC:(UIStoryboardSegue *)segue
ctrl+drag
에서 ViewController
를 보여주는 사진 Exit
이 매우 도움이되었습니다. 감사!
bradleygriffith
대답은 훌륭했습니다. 10 단계를 거쳐 단순화를위한 스크린 샷을 만들었습니다. 이것은 Xcode 6의 스크린 샷입니다.
unwind segue
사이드 바에서를 선택하십시오 .[self performSegueWithIdentifier:@"unwindIdentifier" sender:self];
UIViewController
. 그런 다음 솔루션은 작동합니다
나는 [self dismissViewControllerAnimated: YES completion: nil];
당신을 부름으로 돌려 보낼 것을 사용 했다 ViewController
.
위의 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 :
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)
}
이것이 당신이해야 할 전부입니다!
스토리 보드를 통해 설정되지 않은 VC 로이 작업을 수행하는 방법에 대해 궁금한 사람들 은 ( "프로그래밍 방식으로"+ "언 윈드 세구"를 검색 하여이 질문에 나오는 사람들).
프로그래밍 방식으로 풀기 segue를 설정할 수없는 경우 가장 간단한 유일한 프로그래밍 방식 솔루션은 다음을 호출하는 것입니다.
navigationController?.popToRootViewController(animated: true)
스택의 모든 뷰 컨트롤러가 루트 뷰 컨트롤러로 다시 나타납니다.
탐색 스택에서 최상위 뷰 컨트롤러 만 팝업하려면 다음을 사용하십시오.
navigationController?.popViewController(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 메소드에 넣으면 무시됩니다.
performSegueWithIdentfier
은 정확히 수행합니다 : 한 ViewController에서 다른 ViewController로 segue 수행