我是 swift 的新手,所以请多多包涵。
现在我的问题可以分解为:
我有一个测试 View Controller ,它可以通过显示描述和标题来显示我的“测试”对象。我还有一组测试对象。在右上角,有一个“跳过这个测试”按钮,如果用户点击它,viewcontroller 将继续自己,但改变正在显示的测试对象,例如它只是基本上循环通过一系列测试。我相应地更改了 prepare for segue 方法,以通过 View Controller 推送数据。
但是,如果我已经到达我的测试数组中的最后一个测试,我希望能够移动到一个完全不同的 ViewController(我们就称它为 FinalViewController)。
现在这是我无法修复的部分。
我想直接从“跳过测试”按钮创建一个转场,只是它会根据特定条件转场到不同的 View Controller 。但是,当我尝试通过右键单击 Button 并将其拉到 FinalViewController 在 IB 中创建一个 segue 时,它删除了我之前为该按钮设置的 segue。
有人知道这个问题是否有解决办法吗?谢谢你!!!!
最佳答案
However, as i tried creating a segue in IB by right clicking on the Button and pulling it to the FinalViewController, it erased my previous segue I had for that button
实际上,您不想这样做,相反,您应该从 Controller 本身拖动,而不是从按钮拖动,因为如果您的 segue 是基于按钮创建的,点击它应该总是执行它,这是不是你想要的。
从 ViewController 创建一个 segue 之后,您可以 - 以编程方式 - 调用 performSegue方法并通过实现 prepareForSegue 处理应将哪些数据传递给下一个 viewController方法。
更多信息,查看my answer了解如何使用标识符创建多个 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)
}
}
您可能不想在 viewDidLoad
中实现它,它只是为了演示目的。
确保 ViewController 有 Storyboard ID(在代码片段中,我假设它是“ViewControllerStoryboardID”):
关于ios - 从一个 UIButton 创建多个 segues 到同一个 View Controller 或另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40832724/