2015-05-05 21 views
25

Oturum açma görünümüm var, başarılı giriş yaptıktan sonra bir navigasyon denetleyicisinin ilk görüntüsüne gider, daha sonra kullanıcı bir ayar görünümüne ve daha sonra bir çıkış görünümüne daha derine gidebilir. Bu çıkış, kullanıcıyı giriş görünümüne (navigasyon kontrol cihazının bir parçası olmayan) geri götürmelidir. Bu kod ile çalışır:Swift'deki ilk görüntü denetleyicisine nasıl geri dönebilirim?

let loginViewController = self.storyboard!.instantiateViewControllerWithIdentifier("Login") as? LoginViewController 
self.navigationController!.pushViewController(loginViewController!, animated: true) 

Ama giriş görünümü yapmaması gereken üstündeki gezinme çubuğu görüntüler, belki kullanıyor olmalıdır self.navigationController!.pushViewController dışındaki şeyler mi var?

cevap

1

ViewController'ınızı bunun yerine itmek yerine, bir ViewController'dan diğerine segue yapmanızı tavsiye ederim.

Öncelikle, ilk ViewController'ınızdan giriş ViewController'ınıza Ctrl + clic'e ihtiyacınız var, ardından özellik denetçisinde bir Tanımlayıcı verin.

Bundan sonra yapmanız gereken tek şey şudur:

self.performSegueWithIdentifier("yourIdentifier", sender: self) 

Şimdi, gezinme çubuğunda için, sana giriş görünümünden navigasyon düğmesi kaldırmak ve ilk görünümüne ilişkilendirilecek düşündürmektedir. Gezinme çubuğunu giriş görünümünüzden kaldırır.

+0

Bunun, yapmaya çalıştığı şeyle çalıştığına inanmıyorum ... çünkü, eğerEnggueWithIdentifier'ı gerçekleştirirseniz, pencere yığınlarına yeni bir pencere ekliyorsunuz ... ilk görünüm denetleyicisine dönmüyor. En iyi cevap Allan – Agustin

22

Hikaye panosu ile çalışıyorsanız segueing'e göz atın.

@IBAction func unwindToMe(segue: UIStoryboardSegue){} 

Sonra Storyboard'dan segue oluşturun:

Sadece sizin gidin istediğiniz, denetleyici içinde dinlenmek seçeneği oluşturmak gerekir.

Ve geriye doğru gitmeniz gerektiğinde, yeni oluşturduğunuz ileti dizisini açarak performSegue yöntemini çağırın. Sadece böyle bir şey yazabilirsiniz daha

sadece kodundan yapmak istiyorsanız,: Bu durumda

let loginViewController = self.storyboard?.instantiateViewControllerWithIdentifier("Login") 
UIApplication.sharedApplication().keyWindow?.rootViewController = loginViewController 

, sen devlet başlangıç ​​uygulamanızı ayarlar.

+0

tarafından sağlanan cevap olurdu Bir çekicilik gibi çalıştı, sonra çok – matt

+0

@matt İkinci varyant kullanmak daha iyidir. Çok daha fazla güveniyor ve sizden storyboard'dan kontrol oluşturmuyorsunuz. –

+0

çok teşekkür ederim =] –

57

SWIFT: Bir gevşeme segue kullanmalısınız. Her şeyden önce

  1. , senin FirstViewController aşağıdaki satırı koyun:

     
    @IBAction func prepareForUnwind(segue: UIStoryboardSegue) { 
    
    } 
    

    işlevi aslında içindeki herhangi bir kod yok.


  1. Şimdi, film şeridine gidip kontrol-sürükleyerek Çık düğmesine sarı düğmesinden tarafından LogoutViewController için bir çözülme segue oluşturun.Şunun gibi:

control-dragging in action

  1. FirstViewController için oluşturulan açma segue seçin.

  2. Değişim segue tanımlayıcı:

selected segue


changing the identifier of the segue

    LogoutViewController koduna
  1. Git ve sadece çağrı normalde segue gevşeyin:

    0 Eğer bir Navigasyon denetleyicisi varsa
     
    self.performSegueWithIdentifier("unwindToViewController1", sender: self) 
    

    Swift 4

     
    self.performSegue(withIdentifier: "unwindToViewController1", sender: self) 
    
+1

Bu kesinlikle en iyi cevaptır –

+1

Bir devin hayatında gerçekleşmesi çok nadir olan ilk kez kusursuz bir şekilde çalıştı. Bu cevap hala Xcode 8 ve Swift 3 için geçerlidir. – zeeshan

+0

Bir çekicilik gibi çalışır! Çok teşekkürler – Tib

18

, senin Denetleyiciniz kullanımından:

self.navigationController?.popToRootViewControllerAnimated(true) 
+0

basit, doğru, en iyi –

+0

Kesinlikle en iyi ve en basit cevap. –

3

denemek o

self.view.window?.rootViewController?.dismissViewControllerAnimated(true, completion: nil) 

Bu, uygulama akışının başlangıcına geri dönmenizi sağlar.

+1

Benim için harika çalıştı çünkü 3 farklı görünüm vardı ve arada 2 navigasyon kontrol cihazı vardı –

İlgili konular