【问题标题】:Creating multiple segues from one UIButton to the same view controller or another从一个 UIButton 创建多个 segues 到同一个视图控制器或另一个
【发布时间】:2017-04-11 11:48:20
【问题描述】:

我对 swift 还很陌生,所以请多多包涵。

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

我有一个测试视图控制器,它可以通过显示描述和标题来显示我的“测试”对象。我还有一组 Test 对象。在右上角,有一个'skip this test'按钮,如果用户点击它,viewcontroller 将继续自己,但是改变正在显示的 Test 对象,例如它只是基本上循环通过一系列测试。我已经相应地更改了准备 segue 方法,以通过视图控制器推送数据。

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

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

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

有人知道这个问题是否有解决办法吗?谢谢!!!!

【问题讨论】:

    标签: ios swift uiviewcontroller uibutton segue


    【解决方案1】:

    但是,当我尝试在 IB 中通过右键单击 按钮并将其拉到 FinalViewController,它抹去了我的 我对那个按钮的前一个segue

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

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

    如需更多信息,请查看my answer,了解如何使用标识符创建多个转场并使用它们。


    编辑:

    如果你想推送到相同的当前 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)
        }
    }
    

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

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

    【讨论】:

    • 如果我尝试在我的视图控制器和它本身之间创建一个 segue 它不起作用......? :(
    • "itself" 意味着您应该获取当前的 viewController 并再次推送给它自己。
    • 我应该在 performSegue 或 prepareforsegue 方法中执行此操作,还是应该将它推到哪里...?对不起,我很新,我不知道你在说什么!
    • 很高兴为您提供帮助。无论如何,如果您发现答案有用,我认为您应该投票,或者如果这是您问题的答案,您应该接受它(绿色复选标记)。
    • 哦,好吧!我刚刚接受了它,但不知何故,当我尝试投票时,它会自动恢复为 0:/
    猜你喜欢
    • 2014-01-08
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多