我有一个表单需要执行验证,然后再执行segue并将数据发送到下一个视图控制器。现在,我只是检查是否所有文本字段都已填写:
@IBAction func startBtn(_ sender: Any) {
if(idInput.text == "" || dob1Field.text == "" || dob2Field.text == "" || dob3Field.text == ""){
print("no text")
}
}
我的想法是,当按下开始按钮时,检查是否所有字段都已填充,是否使用prepare
来搜索下一个VC并发送数据。
我正在努力了解如何执行此操作,我将情节提要上的开始按钮链接到了VC,并为其指定了标识符mainUse
,因为它将转到mainUseController
这是准备功能:
override func prepare(for segue: UIStoryboardSegue, sender: Any?){
if segue.identifier == "mainUse"{
let vc = segue.destination as! mainUseController
}
}
我努力理解的部分是一旦检查完成并成功,如何调用prepare函数。谢谢。
答案 0 :(得分:0)
使用以下代码执行segue,首先检查是否满足所有条件,然后执行sese,否则相应地显示错误消息。
@IBAction func startBtn(_ sender: Any) {
if(idInput.text == "" || dob1Field.text == "" || dob2Field.text == "" || dob3Field.text == ""){
print("no text")
//Show alert message here
}else{
self.performSegue(withIdentifier: "mainUse", sender: self)
}
}
答案 1 :(得分:0)
准备(用于segue:)方法是由ViewController委托调用的,您应避免将需要触发的代码放在此处。
您可以要求进行封禁的是 performSegue(withIdentifier:sender:)
更多信息: https://developer.apple.com/documentation/uikit/uiviewcontroller/1621413-performsegue
重要注意事项
请记住,在连接时您的出口为零,如果您想将数据分配或传递给接收方VC,请创建一个强大的属性,并在连接之前但在VC实例化之后分配该值。标签,文本等在绘制之前不会接收任何数据。
如果您需要将文本字段中的条目发送到下一个视图控制器,请创建一个占位符属性,并在搜索过程中进行分配。
今天过得愉快!
答案 2 :(得分:0)
我将情节提要上的开始按钮链接到了VC,并给了它一个 标识符mainUse,因为它将转到mainUseController
这就是问题所在:您的segue似乎是通过从按钮拖动到目标视图控制器而生成的,请不要这样做,因为无论按钮操作中实现了什么,segue都会执行。而是从视图控制器本身(而不是从按钮)拖动到目标视图控制器:
这时,点击按钮不会强行将您导航到目标视图控制器。接下来,您应该做的是通过调用performSegue(withIdentifier:sender:)
方法来执行是否满足条件的segue:
@IBAction func startBtn(_ sender: Any) {
if idInput.text == "" || dob1Field.text == "" || dob2Field.text == "" || dob3Field.text == "" {
print("no text")
return
}
// just don't forget to assign the segue identifier as 'mainUse'...
performSegue(withIdentifier: "mainUse", sender: nil)
}
答案 3 :(得分:0)
@IBAction func startBtn(_ sender: Any) {
if idInput.text?.isEmpty ?? true || dob1Field.text?.isEmpty ?? true || dob2Field.text?.isEmpty ?? true || dob3Fieldtext?.isEmpty ?? true { print("some textField is empty") return }
dispatch_async(dispatch_get_main_queue()) { [unowned self] in
self.performSegueWithIdentifier("YourIdentifier", sender: self)
}
}
如果您使用的是导航控制器:
@IBAction func startBtn(_ sender: Any) {
if idInput.text?.isEmpty ?? true || dob1Field.text?.isEmpty ?? true || dob2Field.text?.isEmpty ?? true || dob3Fieldtext?.isEmpty ?? true { print("some textField is empty") return }
if let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "YourIdentifier") as? NextViewController{
if let navigator = navigationController {
navigator.pushViewController(viewController, animated: true)
}
}
}