这是我对视图控制器的确切设置.segue的种类是show.and名称是s1 这是我的代码:
import UIKit
class ViewController: UIViewController {
var x:String!
@IBOutlet weak var usr: UITextField!
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if(segue.identifier == "s1"){
let v = segue.destination as? ViewController222
v?.ab = usr.text!
}
}
@IBAction func b1(_ sender: UIButton) {
performSegue(withIdentifier: "s1", sender: nil)
}
}
对于第二个视图控制器,ViewController222:
import UIKit
class ViewController222: UIViewController {
var ab:String!
@IBOutlet weak var l1: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
l1.text=ab
}
}
有人可以帮忙吗?虽然设置正确,但我的程序崩溃了
答案 0 :(得分:1)
您不应手动调用performSegue(withIdentifier:sender)。在Interface Builder中添加segue时,也会自动添加一个操作,当您按下segue所连接的按钮时会调用该操作。当您按下按钮时,系统会自动调用prepare(for segue)。
只需删除您的IBAction,它就可以正常工作。
答案 1 :(得分:0)
好的 - 我建议:
运行你的应用程序,看看你是否不再受到崩溃。
注意:不将IBAction重新分配给按钮。
答案 2 :(得分:0)
你似乎有很多隐含的未包装的选项。比如var ab:String!应该避免。它们只会引起问题,因为它们可能是零,而你却不知道。与展开变量的力相同。这必然导致问题v?.ab = usr.text!。最好的办法是利用if和??解除你的选择权安全。
尝试以下内容。
import UIKit
class ViewController: UIViewController {
var x: String?
@IBOutlet weak var usr: UITextField!
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if(segue.identifier == "s1"){
if let v = segue.destination as? ViewController222 {
v.ab = usr.text ?? ""
}
}
}
}
第二课
import UIKit
class ViewController222: UIViewController {
var ab: String?
@IBOutlet weak var l1: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
l1.text = ab
}
}
然后在你的故事板中确保你的segue从按钮拖到ViewController222。