2016-03-30 32 views
1

Benim hızlı uygulamasında bir düğmeyle bir UIViewController var. Bu düğme UIViewController numarası 2'yi açar ve orada kullanıcının başka bir düğmesi vardır., Swift'de iki uiViewControllers'ı aynı anda atmanın bir yolu var mı?

self.dismissViewControllerAnimated(false, completion: nil) 

ve ona sayesinde UIViewController numarası 3 kaybolur olabilir ve kullanıcının gördüğü UIViewController sayı 2: kullanıcı bunu bastığında - o kodu çağırır - o Orada da bir düğme ve kullanıcı bunu bastığında UIViewController numarasını 3. açılır. Benim sorum şu: UIViewController 2 numaranı da reddetmenin bir yolu var mı? Böylece kullanıcı 3 numaradan 1 numaraya kadar sorunsuz bir şekilde geri dönebilir mi? Kullanıcı bastığında

class YourFullRequest: UIViewController{ 

    var delegateRequest:HandleYourFullRequest? 

    @IBAction func exitbuttonaction(sender: AnyObject) { 
     self.dismissViewControllerAnimated(true, completion: nil) 

     delegateRequest?.hideContainer() 
    } 
} 

Ama bu çözüm ile: Şimdilik

Ben bir işlev oluşturulan ve protokol yoluyla diyoruz:

UIViewController sayı 2:

protocol HandleYourFullRequest: class { 
    func hideContainer() 
} 


class FullRequest: UIViewController, HandleYourFullRequest{ 

    func hideContainer(){ 
     self.dismissViewControllerAnimated(false, completion: nil) 
    } 

    @IBAction func exitbuttonaction(sender: AnyObject) { 
     self.performSegueWithIdentifier("temporarySegue", sender: self) 
    } 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if (segue.identifier == "temporarySegue"){ 


     if let fullRequestDetails = segue.destinationViewController as? YourFullRequest 
     { 

      fullRequestDetails.delegateRequest = self 
     } 

    } 
    } 



} 

UIViewController sayı 3 düğmesi - UIViewController numarası 3 kaybolur ve UIViewController 2 numarası bir saniye görünür ve sonra kaybolur. 2 numarayı kullanıcıya göstermeden çıkarmanın ve direkt olarak 1 numaraya yönlendirmenin bir yolu var mı?

cevap

2

Ben düğme hangi eylem için, ancak düğmesini görevden ne zaman görünümü denetleyicisi basıldığında söyleyebilirim gelen kablolu hangi ikisi kadar hala anlamış değilim 3 o görünüm denetleyicisi sayısında self.dismissViewControllerAnimated(false, completion: nil) çağırır 2.

3.

@IBAction func exitButtonAction(sender: AnyObject) { 
    self.presentingViewController?.presentingViewController?.dismissViewControllerAnimated(true, completion: nil); 
} 

Bu, hem görünüm kontrolörleri sundu ve bir navigasyon kontrolörü gibi bir şey de itilmiş olmadığını varsayarak çalışacak görünümü denetleyicisi bu yöntemi koyarak deneyin.

0

kullanabilirsiniz

viewController davanız, 'UIViewController 1 numara' de, pop isteyen viewController olduğunu popToViewController(viewController: UIViewController, animated: Bool). Eğer View Controller için bir başvuru yoksa

popToViewController Documentation

, sen self.navigationController.viewControllers mal alabilirsiniz, bu örnekte birinci nesne olacak.

+0

"self.navigationController.viewControllers" öğesinin ilk öğesine nasıl başvurabilirim? Ben popToViewController (self.navigationController.viewControllers.first: UIViewController, animasyonlu: Bool) 'denedim ama benim durumumda bazı hatalara neden olur :( – user3766930

+0

@ user3766930 Görünüm denetleyicisini açmadan ve kendi içeriğini yazdırabilmeniz için bir kesme noktası ayarlayın. navigationController.viewControllers dizisi Burada görmek için yararlı olun.Kontrol denetleyici hiyerarşiniz tanımladığınız şey olmayabilir. – Tim

0

SetViewControllers adlı UINavigationController üzerinde bir yöntem var. Etkin olmasını istediğiniz tüm görüntü denetleyicilerinin bir dizisini alır. Tüm görünüm denetleyicilerini yığında bir dizi olarak alabilir, istemediğinizi kaldırabilir, sonra setViewControllers öğesini güncelleştirilmiş diziyle çağırabilirsiniz.

+0

Bu ipucu için teşekkürler, - bana şu andaki kodumla bir örnek gösterebilir miydin - tam olarak nasıl kullanabilirim? Bunu gerçekten takdir ediyorum! – user3766930

+0

eğer izin myNav = self.navigationController { var allvc = myNav.viewControllers allvc.removeLast() allvc.removeLast() myNav.setViewControllers (allvc, animasyonlu: true) } –

0

Denetleyicileri yığından çıkarmak için removeLast() işlevini kullanabilirsiniz.

@IBAction func doneAction(sender: AnyObject) { 
    var vc = self.navigationController?.viewControllers 
    // remove controllers from the stack 
    vc?.removeLast() 
    vc?.removeLast() 
    // Jump back to the controller you want. 
    self.navigationController?.setViewControllers(vc!, animated: false)   
} 
+0

Bu çözümü denedim hmm ama düğmesine basar - hiçbir şey işe yaramaz :) Kaybedeceğim bir şey olup olmadığından emin değilim? – user3766930

+0

"Hiçbir şey işe yaramıyor", hiçbir şey olmuyor mu? Düğmeniz işleve bağlı mı? – ryantxr

+0

Evet, sadece 'var vc = self.navigationController? ... ' – user3766930