基本上,我想要一个UIViewController的textfield的值,然后用它来做一个if-else语句。如何获取UIAlertController的textfield值并在其他函数中使用它? (Swift 3)
我将遍历一个字典,如果值(字典的)大于和/或等于用户输入,我将通过tableview显示键。
我做了一个警告框,显示在加载应用程序时。我创建了一个函数,然后在viewDidLoad()函数下调用它。这可以看这里:
func alertBox(){
// create String objects for the title and the message
let title = "Enter your GPA"
let message = "With your help, we can list courses you are most likely eligible for based on the GPA you provide to us."
// create a UIAlertController object
let alert = UIAlertController(title: title,
message: message,
preferredStyle: UIAlertControllerStyle.alert)
// create a UIAlertAction object
//2. Add the text field. You can configure it however you need.
alert.addTextField { (textField) in
textField.text = ""
}
// 3. Grab the value from the text field, and print it when the user clicks OK.
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { [weak alert] (_) in
let textField = alert?.textFields![0] // Force unwrapping because we know it exists.
if let textAlert = textField?.text {
print("Text field: \(textAlert)")
let item = Double(textAlert)
print(item!)
let unwrappedvalue = item!
self.dc.setUserInput(userI: unwrappedvalue)
print(self.dc.getUserInput())
}
}))
// add the UIAlertAction object to the UIAlertController object
let cancelAction = UIAlertAction(title: "Cancel",
style: .cancel,
handler: nil)
alert.addAction(cancelAction)
// display the UIAlertController object
present(alert, animated: true, completion: nil)
}
而且这里是我的viewDidLoad()函数:
override func viewDidLoad() {
super.viewDidLoad()
alertBox()
}
正如你所看到的,我确实是在DataController类类的get/set方法。这样我可以设置该值,然后在稍后的方法中获取该值。我已经使用过它,但它似乎并没有保存我的价值。我也尝试创建一个全局变量,然后将文本字段的值存储到该变量中。
即
var textOfTF : Double = 0.0
后来在alertBox()函数
然后:
if let textAlert = textField?.text {
print("Text field: \(textAlert)")
let item = Double(textAlert)
print(item!)
self.textOfTF = item!
/*
self.dc.setUserInput(userI: unwrappedvalue)
print(self.dc.getUserInput())
*/
}
下面是我的DataController类类我get/set函数:
var userInput : Double = 0.0
func getUserInput() -> Double{
return userInput
}
func setUserInput(userI: Double){
userInput = userI
return
}
它管理当我做了alert.addAction方法(这是这个) :
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { [weak alert] (_) in
let textField = alert?.textFields![0] // Force unwrapping because we know it exists.
if let textAlert = textField?.text {
print("Text field: \(textAlert)")
let item = Double(textAlert)
print(item!)
let unwrappedvalue = item!
self.dc.setUserInput(userI: unwrappedvalue)
print(self.dc.getUserInput())
}
}))
但是然后打印刚刚打印到我0.0值,该值的方法之外。
我的代码有什么问题吗?请指教。
P.S. dc在self.dc.setUserInput(..)是一个变量,我声明了DataController类。
在TableViewController类:
var dc = DataController.sharedInstance
在DataController类类:
static var sharedInstance = DataController()
测试它,它给了我相同的结果,仍然没有设法存储。 –
感谢您的帮助,虽然 –
也许你可以在这个例子中看到静态全局变量用法的一般视图:http://stackoverflow.com/a/43466290/3401842 – kkakkurt