如何添加一个按钮来覆盖故事板 segue(在 swift 3 中)
how to add a button that overrides a storyboard segue (in swift 3)
我添加了故事板转场以向照片添加文字。现在你必须通过 3 个视图控制器才能获得最终照片。 A(选项菜单)-> B(输入文字)-> C(拍照)。如果我向 vc b 添加一个按钮,它会显示为 sigabrt 错误。如果我注释掉下面的代码,就没有错误。很明显,问题是故事板转场。我想要做的就是有一个按钮,它可以从 b->a 移动而不会出现运行时错误。下面的代码是 vc b。只是想让你知道我可以从 c ->a 没问题,但我想从 b -> a
import UIKit
class customViewController: UIViewController {
@IBOutlet weak var zext: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
var destviewc: ccViewController = segue.destination as! ccViewController
destviewc.labelText = zext.text!
} }
您对 prepare(for:sender:)
的实现正在对特定值的存在做出运行时假设(使用 !
)。也就是说,segue.destination
是 ccViewController
而 zext.text
不是零。如果这些假设不正确,您将遇到运行时错误。
相反,您可以使用 Swift guard
语句来使用一些防御技术来确保您的方法处于正确的状态以继续执行。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
guard let destViewC = segue.destination as? CCViewController else {
return
}
guard let text = zext.text else {
return
}
destViewC.labelText = text
}
此外,类型名称应使用大驼峰式。即"customViewController"应该是"CustomViewController".
我添加了故事板转场以向照片添加文字。现在你必须通过 3 个视图控制器才能获得最终照片。 A(选项菜单)-> B(输入文字)-> C(拍照)。如果我向 vc b 添加一个按钮,它会显示为 sigabrt 错误。如果我注释掉下面的代码,就没有错误。很明显,问题是故事板转场。我想要做的就是有一个按钮,它可以从 b->a 移动而不会出现运行时错误。下面的代码是 vc b。只是想让你知道我可以从 c ->a 没问题,但我想从 b -> a
import UIKit
class customViewController: UIViewController {
@IBOutlet weak var zext: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
var destviewc: ccViewController = segue.destination as! ccViewController
destviewc.labelText = zext.text!
} }
您对 prepare(for:sender:)
的实现正在对特定值的存在做出运行时假设(使用 !
)。也就是说,segue.destination
是 ccViewController
而 zext.text
不是零。如果这些假设不正确,您将遇到运行时错误。
相反,您可以使用 Swift guard
语句来使用一些防御技术来确保您的方法处于正确的状态以继续执行。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
guard let destViewC = segue.destination as? CCViewController else {
return
}
guard let text = zext.text else {
return
}
destViewC.labelText = text
}
此外,类型名称应使用大驼峰式。即"customViewController"应该是"CustomViewController".