2016-10-10 2 views
0

나는 이것이 쉬운 일이라는 것을 알고 있지만 그것을 해결하는 방법에 관해서는 머리를 쓸 수 없다. 나는 NavigationController을 사용하고 있지 않습니다. 기본적으로 나는 내 응용 프로그램에서 3 뷰 컨트롤러가 :3 번째 ViewController에서 NavigationController없이 초기 ViewController로 튀는 방법?

  • -LoginVC (탭 때, 그것은이 SignupVC에 등록 버튼 이동했다.)
  • -SignupVC (사용자가 로그인 업, 그것은에 밀어 것입니다 경우 MainAppVC)
  • -MainAppVC가 (I 메소드 로그 아웃 버튼) 전이 들어

사용했다 : present(viewController, animated:, completion:)

사용자 패 LoginVC를 통해 그가 MainAppVC를 예상대로 제시 할 것입니다. 로그 아웃 할 때 dismiss (현재는 MainAppVC)을 사용하여 LoginVC으로 다시 보냅니다.

이제 내가 궁금한 점이 있습니다. 사용자가 계정을 가지고 가입하지 않은 경우이 사용자가 통과 할 VC입니다 (LoginVC> SignupVC> MainAppVC). 성공적으로 등록하면 MainAppVC가 제공됩니다. 이제 그는 로그 아웃 한 후 동일한 dismiss 메소드를 사용했기 때문에 MainAppVC에서 SignupVC로 전환됩니다.

내가하고 싶은 일은 MainAppVC에서 LoginVC로 사용자를 다시 보내는 것입니다. 프로젝트에서 내비게이션 컨트롤러를 사용하지 않고 어떻게 수행 할 수 있습니까? 인기있는 앱 (Facebook, Twitter, Instagram 등)이 앱에서 어떻게 이것을 처리합니까?

내가 생각할 수있는 한 가지 방법은 세 번째부터 첫 번째 VC까지 세그 (segue)를 수행하는 것이지만, 잠재적 인 문제인 대신에 스택에 추가하기 때문에 더러운 방법이라고 생각합니다.

+0

[this (http://stackoverflow.com/a/15839298/1219956)] – Fonix

+0

대신 현재 루트보기 컨트롤러를 설정할 수 있습니다. 더 나은 옵션입니다. –

+0

두 가지 모두 의견을 보내 주셔서 감사합니다. 나는 두 가지 방법을 시도 할 것이다. 나는 해당 게시물을 본 @Fonix 내가 1 VC에 3에서 휴식을 취하면 그것도 또한 2 VC 팝업 것, 어떤 기회를 뒤입니다? 나는 그것이 터지 려하고 메모리에 매달려 있지 않도록하고 싶다. – aresz

답변

1

또 다른 옵션은 unwind segues를 사용하는 것입니다.스토리 보드에서 다음

@IBAction func unwindToLogin(segue: UIStoryboardSegue) { 
} 

을 다음과 같이 오른쪽 (예를 들어) 버튼에서 클릭하고 드래그 마지막의 ViewController에서, 돌아갈 방법을 구현하려는의 ViewController에서

은 종료하고 선택 걱정하지 마세요. 당신은 또한 프로그래밍 방식으로이 작업을 수행 할 수 있습니다

enter image description here

참고. Here 좋은 자습서입니다.

+0

감사를 나타납니다 팝업 수 있습니다. 나는 이것을 테스트했고 작동합니다. 나는 다른 모든 대답을 테스트했고 그것들도 잘 작동합니다. 그러나이 방법은 프로젝트의 설정면에서 가장 편리합니다. – aresz

2

세 가지 솔루션이 있습니다.
1. 윈도우 루트 뷰 컨트롤러를 사용하십시오. 루트 뷰 컨트롤러를 로그인과 메인 뷰 컨트롤러 사이에 설정하십시오.

let loginSb = UIStoryboard(name: "Login", bundle: nil) 
let loginVc = loginSb.instantiateInitialViewController() 
window!.rootViewController = loginVc 

2. 메인 뷰 컨트롤러를 처음으로 표시 할 때 가입보기 컨트롤러를 무시하십시오. 그리고 로그인보기 컨트롤러에서 메인보기 컨트롤러를 표시하십시오.
3. 주보기 컨트롤러를 닫을 때 완료 블록에서 가입보기 컨트롤러를 닫으려고합니다.
첫 번째 것이 가장 좋다고 생각합니다.

rootViewController ( UINavigationController와 함께)를 사용하지 강요하는 경우
2

, 당신은 이전 VC (예제의 의사 코드) 어느 쪽이 MainAppVC에서 확인하고 수행해야합니다

참고 : 스위프트 3 코드.

// If previous VC is LoginVC 
dismiss(animated: true) 

// else if previous VC is SignupVC 
// here's what you want 
presentingViewController?.presentingViewController?.dismiss(animated: true) 

희망을 얻었습니다.

1

가장 좋은 방법입니다 : 사용자가 LoginVC 현재 MainVC에서 그런 다음, 성공적으로 등록되면 는 SignUpVC을 해제.

SignupVC에서

:

self.dismissViewControllerAnimated(true, completion: { 
       self.LoginVC!.present(MainVC, animated: true, completion:nil) 

    }) 

이 방법은 주로 사용된다.