我之前遇到了停止segue并在textField为空时显示警告的问题。那个问题解决了。我现在想通过一些逻辑测试来进一步运行这些文本字段的内容。但是,我的代码似乎没有捕获错误。代码如下:
import Foundation
import UIKit
import Darwin
class View3on3 : UIViewController, UITextFieldDelegate {
@IBOutlet weak var APTeams: UITextField!
@IBOutlet weak var APRounds: UITextField!
@IBOutlet weak var APBreakers: UITextField!
override func viewDidLoad()
{
super.viewDidLoad()
initializeTextFields()
}
func initializeTextFields()
{
APTeams.delegate = self
APTeams.keyboardType = UIKeyboardType.NumberPad
APRounds.delegate = self
APRounds.keyboardType = UIKeyboardType.NumberPad
APBreakers.delegate = self
APBreakers.keyboardType = UIKeyboardType.NumberPad
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if (APTeams.text!.isEmpty || APRounds.text!.isEmpty || APBreakers.text!.isEmpty)
{
let alertController: UIAlertController = UIAlertController(
title: "Data missing!",
message: "Please enter valid data into all 3 fields.",
preferredStyle: UIAlertControllerStyle.Alert)
let okAction = UIAlertAction(
title: "OK",
style: UIAlertActionStyle.Default,
handler: nil)
alertController.addAction(okAction)
presentViewController(alertController, animated: true, completion: nil)
}
else if (Int(String(APTeams.text)) < Int(String(APBreakers.text)))
{
let alertController: UIAlertController = UIAlertController(
title: "Math Error!",
message: "The number of breaking teams cannot be more than the number of teams.",
preferredStyle: UIAlertControllerStyle.Alert)
let okAction = UIAlertAction(
title: "OK",
style: UIAlertActionStyle.Default,
handler: nil)
alertController.addAction(okAction)
presentViewController(alertController, animated: true, completion: nil)
}
else if (Int(String(APTeams.text)) > 9999)
{
let alertController: UIAlertController = UIAlertController(
title: "Math Error!",
message: "Please input a number of teams less than 10,000.",
preferredStyle: UIAlertControllerStyle.Alert)
let okAction = UIAlertAction(
title: "OK",
style: UIAlertActionStyle.Default,
handler: nil)
alertController.addAction(okAction)
presentViewController(alertController, animated: true, completion: nil)
}
else
{
let DestViewController : View3on3Results = segue.destinationViewController as! View3on3Results
DestViewController.AP1 = APTeams.text!
DestViewController.AP2 = APRounds.text!
DestViewController.AP3 = APBreakers.text!
//self.performSegueWithIdentifier("segueTest",sender: View3on3Results.self)//
}
}
}
任何人都知道怎么了?非空字段的第一个测试工作正常,如果3个textField中的任何一个为空,则抛出错误。
此外,如果有人知道如何测试以确保条目仅包含整数,那将非常感激。这是我在测试整数值之前需要运行的第二个测试。
附录:我正在使用XCode 7 beta 4,用Swift 2.0编写。
编辑:我的代码现在看起来像这样,现在segue只是在没有检查的情况下发生。
@derdida试着按照你的说法去做。 segue刚刚发生,没有检查任何条件。你能纠正我更新的代码吗?
func checkIfPassed() {
if (APTeams.text!.isEmpty || APRounds.text!.isEmpty || APBreakers.text!.isEmpty)
{
let alertController: UIAlertController = UIAlertController(
title: "Data missing!",
message: "Please enter valid data into all 3 fields.",
preferredStyle: UIAlertControllerStyle.Alert)
let okAction = UIAlertAction(
title: "OK",
style: UIAlertActionStyle.Default,
handler: nil)
alertController.addAction(okAction)
presentViewController(alertController, animated: true, completion: nil)
}
else if (Int(String(APTeams.text)) < Int(String(APBreakers.text)))
{
let alertController: UIAlertController = UIAlertController(
title: "Math Error!",
message: "The number of breaking teams cannot be more than the number of teams.",
preferredStyle: UIAlertControllerStyle.Alert)
let okAction = UIAlertAction(
title: "OK",
style: UIAlertActionStyle.Default,
handler: nil)
alertController.addAction(okAction)
presentViewController(alertController, animated: true, completion: nil)
}
else if (Int(String(APTeams.text)) > 9999)
{
let alertController: UIAlertController = UIAlertController(
title: "Math Error!",
message: "Please input a number of teams less than 10,000.",
preferredStyle: UIAlertControllerStyle.Alert)
let okAction = UIAlertAction(
title: "OK",
style: UIAlertActionStyle.Default,
handler: nil)
alertController.addAction(okAction)
presentViewController(alertController, animated: true, completion: nil)
}
else
{
// everything is fine, so manually go to your next ViewController
self.performSegueWithIdentifier("3on3Segue", sender: nil)
}
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let DestViewController : View3on3Results = segue.destinationViewController as! View3on3Results
DestViewController.AP1 = APTeams.text!
DestViewController.AP2 = APRounds.text!
DestViewController.AP3 = APBreakers.text!
}
答案 0 :(得分:1)
我会稍微改变你的代码。
将ViewController1连接到ViewController2(而不是Button),这样您就可以手动执行segue。我不会进入“prepareForSegue” - 我会编写自己的“检查是否通过”功能,如下:
func checkIfPassed() {
if (APTeams.text!.isEmpty || APRounds.text!.isEmpty || APBreakers.text!.isEmpty)
{
// show your first alert
} else if(APTeams.text.toInt() != nil && ABreakers.text.toInt() != nil)) {
// ok, both values are no integers, show your next error
// show your second alert
} else if(APTeams.text.toInt() < ABreakers.text.toInt()) {
// values are integers, and ABreakers.text is > then APTeams.text
// show your third alert, and so on
} else {
// everything is fine, so manually go to your next ViewController
self.performSegueWithIdentifier("yourSegueIdentifier", nil)
}
}
更新:你现在可以检查你的字符串是否是与Optionals的整数:( Swift 2.0)
let text:Int? = Int(textfield.text)
答案 1 :(得分:0)
准备segue将允许您根据需要配置数据并激活执行segue。你应该做什么:获得触发这个segue的动作:点击手势,按钮动作或其他任何东西。在那里,您进行验证,如果一切正常,请执行
self.performSegueWithIdentifier("segueTest",sender: View3on3Results.self)