【问题标题】:Performsegue from another viewcontroller doesnt' work从另一个视图控制器执行segue 不起作用
【发布时间】:2019-02-02 15:45:10
【问题描述】:

到目前为止,我一直在使用 Objective-C,并决定从现在开始使用 swift 进行开发。

我不知道为什么这个简单的代码不起作用。

我有两个viewControllers作为superview的容器视图,一个叫做'sideViewController',另一个是'dashViewController'。

我有一个从 dashViewController 到另一个名为“nextViewController”的 viewController 的标识符为“Appointment”的segue

如果我尝试在 dashViewController.swift 中执行 egue,它可以正常工作。

但是,如果我尝试在 'sideViewController' 中使用它,为什么它不起作用?

@IBAction public func buttonTapped(_ sender: Any) {
    let storyBoard = UIStoryboard(name: "Main", bundle: nil)
    let vc = storyBoard.instantiateViewController(withIdentifier: "dashboardViewController")
    vc.performSegue(withIdentifier: "Appointment", sender: self) //nothing happens
}

在目标 C 中,我可以将单例用于 dashViewController,如下所示

[[MainViewController sharedViewController] performSegueWithIdentifier:@"Appointment" sender:nil];

但是在swift中,以下代码不起作用

DashboardViewController.sharedInstance.performSegue(withIdentifier: "Appointment", sender: nil)

我已经为此苦苦挣扎了 2 天..

请帮助我。

谢谢

【问题讨论】:

    标签: storyboard singleton segue viewcontroller swift4.2


    【解决方案1】:

    在您的 buttonTapped() 函数中,您正在创建“dashboardViewController”的 new 实例,然后尝试执行转场...但您没有将新的 VC 或其视图添加到层​​次结构中,因此即使要执行 segue ,也没什么可看的。

    您想要做的是使用协议/委托模式。

    创建一个协议,以便您在“sideViewController”内的按钮点击可以告诉其委托(“主”视图控制器)告诉“dashboardViewController”的现有实例执行segue。

    Swift 中的协议和委托功能与 Obj-C 中的相同......只是语法不同。

    【讨论】:

    • 感谢您的回答!我试试看
    • 我可以再问一个吗?为什么 swift 中的单例不能像 objectice c 那样工作?我这样声明单例:'static let shared = someViewController()'
    • 可以创建一个单例视图控制器类,但我强烈建议不要这样做。看看这个答案:stackoverflow.com/a/41136877/6257435 ...您也可以为您的子视图控制器使用全局变量,但我再次建议您不要这样做。我认为使用协议/委托模式会更好。
    • 感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2012-08-10
    • 2021-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多