2016-06-12 9 views
10

でビューコントローラは、こんにちは、私はViewControllerをを提示し、私の現在のモーダルビューを解任しようとしているが、このコードはその逆がpresentviewcontrollerスウィフト

の完了ブロックにあまり機能していない

self.dismissViewControllerAnimated(true, completion: { 
       let vc = self.storyboard?.instantiateViewControllerWithIdentifier("OrderViewController") 
       self.presentViewController(vc!, animated: true, completion: nil) 
      }) 

が動作していない却下と現在

EDIT:交換されたvc!自己

+0

はself.parentViewControllerてみてください.presentViewController(VC !,アニメ化?: true、completion:nil) –

+0

@SandeepKumarまだ動作していません –

+0

最初に提示しようとしていますか、最初に却下しますか? – Code

答えて

14

便利です。この

self.dismissViewControllerAnimated(true, completion: { 
       let vc = self.storyboard?.instantiateViewControllerWithIdentifier("OrderViewController") 
       self.presentViewController(vc!, animated: true, completion: nil) 
      }) 

希望をお試しください自己(現在のViewController)を提示したローラー。そのビューコントローラが以下のように使用できるrootViewControllerである場合、そのクエリではない場合はコントローラの階層を表示します。

if let vc3 = self.storyboard?.instantiateViewControllerWithIdentifier("vc3") as? ViewController3 { 
    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
    appDelegate.window?.rootViewController!.presentViewController(vc3, animated: true, completion: nil) 
} 
+0

ありがとう!あなたのコードはうまく動作し、これもhttp://stackoverflow.com/questions/26667009/get-top-most-uiviewcontrollerも –

6

に私は「自己」が「VC」ではなく、「VC」自己

はあなたのコード

self.dismissViewControllerAnimated(true, completion: { 
       let vc = self.storyboard?.instantiateViewControllerWithIdentifier("OrderViewController") 
       vc!.presentViewController(vc!, animated: true, completion: nil) 
      }) 

を提示するために提示するビューコントローラである必要があり、あなたのコードに誤りがあると思いますあなたがviewContを取得する必要があり、これは

+0

これを編集するのを忘れました。コードはまだ動作していません –

+0

何とかvcがnilかどうかをチェックしますか?すべてがOKであることを確認するために、問題を追跡することができます。 – HDT

+0

それはnilではなく、私のコードは今ではvc = self.storyboard?.instantiateViewControllerWithIdentifier( "OrderViewController")を!OrderViewController –

3
let parent = self.parentViewController! 

parent.dismissViewControllerAnimated(true, completion: { 
      let vc = self.storyboard?.instantiateViewControllerWithIdentifier("OrderViewController") 
      parent.presentViewController(vc!, animated: true, completion: nil) 
     }) 
7

あなたはのUIViewController AがBのUIViewControllerを呼び出し、最初のコントローラが却下されたときに、2つのコントローラがnilであるため、それを行うことはできません。

UIViewControllerをベースにする必要があります。この場合、MainViewControllerがベースです。コントローラ間でナビゲーションを呼び出すには、プロトコルを使用する必要があります。あなたは、プロトコルを使用して行うことができます

は怒鳴るよう例えばとしましょう: - :あなたのメインビューコントローラ

class MainViewController: UIViewController, FirstViewControllerProtocol { 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 


@IBAction func goToFirstViewController(sender: AnyObject) { 
    let viewController = self.storyboard?.instantiateViewControllerWithIdentifier(String(FirstViewController)) as! FirstViewController 
    viewController.delegate = self 
    self.presentViewController(viewController, animated: true, completion: nil) 
} 



//MARK: Protocol 
func dismissViewController() { 
    if let viewController = self.storyboard?.instantiateViewControllerWithIdentifier(String(SecondViewController)){ 
     self.presentViewController(viewController, animated: true, completion: nil) 
    } 
} 

Code example with storyboard:

で今

protocol FirstViewControllerProtocol { 
    func dismissViewController() 
} 

class FirstViewController: UIViewController { 
    var delegate:FirstViewControllerProtocol! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


    @IBAction func goBack(sender: AnyObject) { 
     self.dismissViewControllerAnimated(true) { 
      self.delegate!.dismissViewController() 
     } 
    } 

プロトコルを設定あなたのViewControllerには


+1

これは受け入れられた答えでなければなりません。 – user2875289

0
if let vc = storyboard?.instantiateViewController(withIdentifier: "IdOfYourVC") { 

    present(vc, animated: true, completion: nil) 
} 
2

は、ここでのViewControllerを却下するにはViewControllerを

let NotificationVC = self.storyboard?.instantiateViewController(withIdentifier: "NotificationVC") as! ExecutiveNotificationViewController 

self.present(NotificationVC, animated: true, completion: nil) 

を提示するSwift3

のためのソリューションです:

self.dismiss(animated: true, completion: nil)