Swift:从自定义对话框中选择另一个ViewController

时间:2019-06-10 12:58:18

标签: swift segue

我有一个“自定义对话框”,当我使用“关闭”时,它会返回到其调用方。我想要它然后调用另一个ViewController。我可以从“自定义对话框”本身或从父对话框中执行此操作,如果我发现它已经返回。

获取另一个ViewContorller的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

作为一种选择,可以使用委托模式来实现。这里是一些元代码:

class CallerController: UIViewController {
    let dialog: CustomDialog()

    func viewDidLoad() {
        super.viewDidLoad()

        dialog.delegate = self
    }

    func showDialog() {
        dialog.show()
    }
}

extension CallerController: CustomDialogDelegate {
    func dialogWillDisappear() {
        dialog.hide()

        // navigate to another view controller here
    }
}

protocol CustomDialogDelegate {
    func dialogWillDisappear()
}

class CustomDialog {
    weak var delegate: CustomDialogDelegate?


    func someButtonDidTap() {
        delegate.dialogWillDisappear()
    }
}

这个想法是:您可以在caller中使用对话框进行操作,并在那里执行任何导航。

答案 1 :(得分:0)

我对此感到非常恐惧。这肯定是不合时宜的答案。我对代表和协议的理解不强。从防御上来说,这是直接解决问题的方法。

以下函数在调用ViewController中。 var dialogSemaphore在类外部声明为全局变量,初始值为3。 当用户在弹出对话框中按下“保存”,并选择到ViewHistory viewController时,dialogSemaphore更新为4。在对话框启动之前调用nextIteration()。额外的延迟允许在实际segue发生之前进行任何整理例程。

main_filter