【发布时间】:2017-04-17 07:10:04
【问题描述】:
基本上,我想要 UIViewController 的文本字段的值,然后用它来执行 if-else 语句。
我将遍历字典,如果(字典的)值大于和/或等于用户输入,我将通过 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 值。
我的代码有什么问题吗?请指教。
附: self.dc.setUserInput(..) 中的 dc 是我声明 DataController 类的变量。
在 TableViewController 类中:
var dc = DataController.sharedInstance
在 DataController 类中:
static var sharedInstance = DataController()
【问题讨论】:
标签: ios uitableview swift3 uitextfield uialertcontroller