2016-03-24 34 views
1

Kişiler Uygulaması için yapılan/düzenle sayfasına benzer bir şey oluşturmak istiyorum. Modal görünümün arkasında bir bakış açısında bir değişiklik olduğu görünüyor, ancak bunun nasıl bir davranış ürettiğinden emin değilim. İşte Modal Görünüm Denetleyicisinin Arkasındaki Görünüm Denetleyicilerini Değiştirme

şimdiye kadar baktım şudur: Bu yazı, bir doğru cevabı var gibi

iOS: Switch view controller behind current modal view controller? görünüyor. Ancak, making the root view controller a delegate of the modal view ile ne demek istediğini ve call a delegate method için ne anlama geldiğini bilmiyorum.

navigasyon kontrolörü gömülmüş bir VC1 düşünün: İşte

istiyorum gerçekleştirmek şeydir. Vc2'de bir butona dokunarak vc2'nin moda sunulmasına neden oluyor. Vc2'de "bitti" ye bastığınızda, mod görünümünü reddeder, vc2 ve vc3'ü sunar. Vc3'te bir geri düğmesine dokunduğunuzda, vc1'e geri döner.

Ben modally VC1 üstünde VC2 gösterisi yapabilirsiniz:

İşte şimdiki davranıştır. Ama "done" düğmesine vc2'de basıldığında, vc3'e gitmek yerine vc1'e geri dönülür, daha sonra "back" (geri) öğesine dokunduğunuzda, vc1'e gider.

ben animasyon olmadan VC3 için VC1 gelen segue çalıştı, sonra modally v2 segue: Burada

Daha önce de denedim budur. Son derece çirkin geçişli bu tür işler ve bu Presenting view controllers on detached view controllers is discouraged hata gösterilmesine neden olur. Ayrıca, unwindToSegue yöntemlerinin farklı kombinasyonlarını denedim, ancak bunu da anlayamadım.

Herhangi bir yardım çok takdir edilecektir! Zamanınız için çok teşekkür ederim :)

cevap

1

Kök görünümü denetleyicisini (vc1), vc1'de bir protokol oluşturarak ve kalıcı görünüm denetleyicinizin bir özelliği olarak kullanarak, modal görünüm denetleyicinizin bir temsilcisini yaparsınız. Modal view denetleyicisini reddettiğinizde, temsilci yöntemlerinden birini arayın. Böyle bir şey sizin için işe yarayabilecek:

VC1:

protocol Vc1Delegate: class { 
    func pushToVc3() 
} 

class Vc1: UIViewController, Vc1Delegate 
{ 
    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if segue.identifier == "Vc2Modal" { 
      if let _vc2 = segue.destinationViewController as? Vc2 { 
       _vc2.delegate = self 
      } 
     } 
    } 

    @IBAction func showVc2Modal() { 
     performSegueWithIdentifier("Vc2Modal", sender: nil) 
    } 

    // MARK: Vc1Delegate 

    func pushToVc3() { 
     performSegueWithIdentifier("Vc3PushWithoutAnimation", sender: nil) 
    } 
} 

Vc2: Ben süper geç cevap için özür

class Vc2: UIViewController 
{ 
    weak var delegate: Vc1Delegate? 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 

    @IBAction func dismiss() { 
     delegate?.pushToVc3() 
     dismissViewControllerAnimated(true, completion: nil) 
    } 
} 
+0

. Ama sorumu cevaplamak için zaman ayırdığınız için çok teşekkür ederim. Bu kod satırının anlamı nedir? _vc2.delegate = self'? – aejhyun

+0

Bu kodun önemini anlıyorum. Soruma cevap vermek için zaman ayırdığınız için çok teşekkür ederim. Sorunumu çözdü :) – aejhyun

+0

Çözümünüz çalışmıyor. Modalın arkasındaki denetleyici değiştirilmedi – Codenator81

İlgili konular