从一个 UIButton 到同一个视图控制器或另一个创建多个 segue

Mis*_*sha 1 uibutton uiviewcontroller ios segue swift

我对 swift 还很陌生,所以请耐心等待。

现在我的问题可以分解为:

我有一个测试视图控制器,它可以通过显示描述和标题来显示我的“测试”对象。我也有一组 Test 对象。在右上角,有一个“跳过此测试”按钮,如果用户点击它,视图控制器将自动切换到自身,但更改正在显示的测试对象,例如它只是基本上循环遍历一个数组测试。我相应地更改了准备转场方法以通过视图控制器推送数据。

但是,如果我已经到达我的测试数组中的最后一个测试,我希望能够移动到一个完全不同的 ViewController(让我们称之为 FinalViewController)。

现在这是我无法修复的部分。

我想直接从“跳过测试”按钮创建一个转场,只是它根据特定条件转入不同的视图控制器。但是,当我尝试通过右键单击 Button 并将其拉到 FinalViewController 在 IB 中创建一个 segue 时,它​​删除了我之前为该按钮创建的 segue。

有谁知道是否有解决此问题的方法?谢谢你!!!!

Ahm*_*d F 6

但是,当我尝试通过右键单击 Button 并将其拉到 FinalViewController 在 IB 中创建一个 segue 时,它​​删除了我之前为该按钮创建的 segue

实际上,您不想这样做,相反,您应该从控制器本身而不是从按钮拖动,因为如果您的 segue 是基于按钮创建的,那么点击它应该始终执行它,而这不是您想要的想。

从 ViewController 创建 segue 后,您可以 - 以编程方式 - 调用performSegue方法并通过实现prepareForSegue方法来处理应该传递给下一个 viewController 的数据。

有关更多信息,请查看我的答案以了解如何使用标识符创建多个 segue 并使用它们。


编辑:

如果要推送到相同的当前 ViewController,则performSegue方法不是最佳解决方案。您应该自己推送/呈现给同一个 ViewController:

class ViewController: UIViewController {
    var myString: String?

    override func viewDidLoad() {
        super.viewDidLoad()

        // here we go
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let sameViewController = storyboard.instantiateViewControllerWithIdentifier("ViewControllerStoryboardID") as! ViewController
        sameViewController.myString = "the value of the new myString"
        navigationController?.pushViewController(sameViewController, animated: true)

        print(myString)
    }
}
Run Code Online (Sandbox Code Playgroud)

可能您不想在 中实现它viewDidLoad,这只是为了演示目的。

确保 ViewController 有一个故事板 ID(在代码片段中,我假设它是“ViewControllerStoryboardID”):

在此处输入图片说明