2017-02-27 2 views
0

私はViewController AからViewController A(同じVC)にsegueを実行しようとしています。 VCからボタンにドラッグ&ドロップして識別子(私の場合は "sameVC")を設定すると、私はそれを行うことができます。performSegueデリゲートメソッドから同じViewControllerへ

ボタンをタップすると、セグが期待通りに機能します。問題は、私は電話する必要があります

self.performSegue(withIdentifier: "sameVC", sender: self) 

代理人からです。ボタンをタップしたときに、私はこのように、デリゲートを持つ関数を呼び出す必要があります。

class ViewControllerA: ViewController, MyDelegate { 

    var mC = MyClass() 

    override func viewDidLoad() { 
    mC.delegate = self 
    } 

    @IBAction func buttonTapped(_ sender: UIButton) { 
    mC.myfunc() 
    } 

    func success { 
    // Trying to call delegate 
    self.performSegue(withIdentifies: "sameVC", sender: self) 
    } 
} 

protocol MyDelegate { 
    func success() 
} 

class MyClass { 
    var delegate: MyDelegate? 

    func myfunc() { 
    // ... 
    self.delegate.success() 
    } 
} 

は、デリゲートは「成功」-functionにViewControllerAに戻ってきたとき、私はセグエを実行したいです、 segueが "buttonTapped"関数で暗黙的に呼び出されたため、ビューはもう存在しません。

segueが同じVCに行かないときは、ViewControllerAからViewControllerBにCtrl +ドラッグしますが、これは1つのViewControllerだけではできません(またはこれを行う方法がわかりません)。

私はこれを達成する方法はありますか?

+0

ハッサンエスカンダリのコメント:http://stackoverflow.com/questions/42482380/performsegue-to-same-viewcontroller-from-delegate-method#comment72106011_42482455 – IceCoala

答えて

0

Ctrlの代わりに+のViewController自体からボタン、[Ctrl] +ドラッグからドラッグ、あなたは、あなたがにナビゲートしたいことがありますperformSegue

を呼び出すことが待っていますから行くためにあなたは、複数のviewcontrollersを持っていますあなたのストーリーボードのviewControllerに識別子を割り当てて、storyboard.instantiateViewControllerWithIdentifierメソッドを使用して、目的のViewControllerをインスタンス化し、それをユーザーに提示することができます。現在のビューコントローラーの上にプッシュします。

+0

これは、2つのViewControllerがある場合にのみ可能です。 ctrl +同じVCにドラッグします。 – IceCoala

+0

'storyboard.instantiateViewControllerWithIdentifier'を使用してView Controllerをインスタンス化し、現在のView Controllerの上にプッシュします –

関連する問題