프로그래밍 방식으로 Unwind segue를 수행하는 방법은 무엇입니까?
스토리 보드를 사용하면 매우 쉽습니다. 액션을 "종료"로 드래그하기 만하면됩니다. 그러나 내 코드에서 어떻게 호출해야합니까?
- 수동 세구를 작성하십시오 ( ctrl파일 소유자에서 -drag하여 종료).
- 녹색 EXIT 버튼 아래 왼쪽 컨트롤러 메뉴에서 선택하십시오.
긴장을 풀려면 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) 스토리 보드의 소스 뷰 컨트롤러 문서 개요에서 하단을 선택하고 (아래 근처에 나열 됨) 식별자를 지정하십시오 .
4) 소스 뷰 컨트롤러 에서이 메소드를 사용하여 풀기 segue를 호출 하여 풀기 segue 이름을 대체하십시오.
// 목표 C
[self performSegueWithIdentifier:@"unwindToContainerVC" sender:self];
// 빠른
self.performSegueWithIdentifier("unwindToContainerVC", sender: self)
NB. unwind 메소드에서 segue 매개 변수의 sourceViewController 특성을 사용하여 소스 제어기의 노출 된 특성에 액세스하십시오. 또한 프레임 워크가 소스 컨트롤러 해제를 처리합니다. 이를 확인하려면 소스 컨트롤러에 dealloc 메소드를 추가하고 일단 종료되면 실행되어야하는 로그 메시지를 추가하십시오. dealloc이 실행되지 않으면 유지주기가있을 수 있습니다.
bradleygriffith
대답은 훌륭했습니다. 10 단계를 거쳐 단순화를위한 스크린 샷을 만들었습니다. 이것은 Xcode 6의 스크린 샷입니다.
주황색 아이콘에서 빨간색 끝내기 아이콘으로 Control- 드래그하면보기에서 아무 작업이나 버튼없이 풀기 기능을 만들 수 있습니다.
그런 다음을 선택하고 unwind segue
코드에서 액세스 할 식별자를 설정 하십시오 .
코드에서
[self performSegueWithIdentifier:@"unwindIdentifier" sender:self];
나는 [self dismissViewControllerAnimated: YES completion: nil];
당신을 부름으로 돌려 보낼 것을 사용 했다 ViewController
.
Unwind Segue에 관한 Apple 기술 노트의 텍스트 인용 : 프로그래밍 방식으로 만 트리거되는 unwind segue를 추가하려면 장면의 뷰 컨트롤러 아이콘에서 종료 아이콘으로 control + 드래그 한 다음 팝업 메뉴에서 새로운 segue에 대한 unwind 액션을 선택하십시오.
위의 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.2, Xcode 10+
스토리 보드를 통해 설정되지 않은 VC 로이 작업을 수행하는 방법을 궁금해하는 사람들을 위해 ( "프로그래밍 방식으로"+ "풀기 해제"를 검색 하여이 질문에 나오는 사람들).
프로그래밍 방식으로 풀기 segue를 설정할 수없는 경우 가장 간단한 유일한 프로그래밍 방식 솔루션은 다음을 호출하는 것입니다.
navigationController?.popToRootViewController(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 메소드에 넣으면 무시됩니다.
스위프트 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)
}
이것이 당신이해야 할 전부입니다!
참고 URL : https://stackoverflow.com/questions/12509422/how-to-perform-unwind-segue-programmatically
'Programing' 카테고리의 다른 글
MongoDB의 무작위 레코드 (0) | 2020.03.16 |
---|---|
Windows 명령 행에서 유니 코드 문자를 사용하는 방법은 무엇입니까? (0) | 2020.03.16 |
TRUE 및 FALSE 매크로의 이상한 정의 (0) | 2020.03.16 |
Windows에서 고양이를 대체합니까? (0) | 2020.03.16 |
배열이 비어 있는지 또는 존재하지 않는지 확인하십시오. (0) | 2020.03.16 |