2017-02-27 37 views
0

我试图执行从ViewController A到ViewController A(相同的VC)segue。我可以做到这一点,当我按Ctrl +从一个按钮拖动到VC并设置标识符(在我的情况下“相同的VC”)。performSegue从委托方法相同的ViewController

点击该按钮时,segue按预期工作。问题是,我需要致电

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() 
    } 
} 

当委托回来ViewControllerA在“成功”功能全,我要执行的SEGUE,但视图不再存在,因为segue被称为“buttonTapped”功能的隐式。

当segue不会去相同的VC,我只会按Ctrl +从ViewControllerA拖到ViewControllerB,但这是不可能的只有一个ViewController(或我不知道如何做到这一点)。

有什么办法可以实现这个目标吗?

+0

评论人Hassan Eskandari的作品:http://stackoverflow.com/questions/42482380/performsegue-to-same-viewcontroller-from-delegate-method#comment72106011_42482455 – IceCoala

回答

0

来代替Ctrl +从按钮,按Ctrl +拖动从视图控制器本身拖动,然后它会等待您致电performSegue

而从去你有一个以上的viewcontrollers你可能想要导航到你可以在故事板中为您的viewControllers指定一个标识符,并使用storyboard.instantiateViewControllerWithIdentifier方法实例化您所需的ViewController并将其呈现给用户,例如将它推到当前视图控制器的顶部。

+0

这是唯一可能的,当我有两个ViewControllers,你可以不按Ctrl +拖动到相同的VC。 – IceCoala

+0

使用'storyboard.instantiateViewControllerWithIdentifier'来实例化你的视图控制器,并将它推到当前视图控制器之上 –