0

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

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

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

我有一个从 dashViewController 到另一个名为“nextViewController”的视图控制器的标识符“约会”的 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];

但是很快,以下代码不起作用

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

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

请帮我。

谢谢

4

1 回答 1

0

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

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

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

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

于 2018-08-29T13:35:43.823 回答