Ios 如何获取UIAlertController的textfield值并在其他函数中使用它?(Swift 3)
基本上,我需要UIViewController的textfield的值,然后使用它来执行if-else语句 我将在字典中循环,如果(字典的)值大于和/或等于用户输入,我将通过tableview显示键 我做了一个警报框,在加载应用程序时显示。我创建了一个函数,然后在viewDidLoad()函数下调用它。这可以在这里看到:Ios 如何获取UIAlertController的textfield值并在其他函数中使用它?(Swift 3),ios,uitableview,swift3,uitextfield,uialertcontroller,Ios,Uitableview,Swift3,Uitextfield,Uialertcontroller,基本上,我需要UIViewController的textfield的值,然后使用它来执行if-else语句 我将在字典中循环,如果(字典的)值大于和/或等于用户输入,我将通过tableview显示键 我做了一个警报框,在加载应用程序时显示。我创建了一个函数,然后在viewDidLoad()函数下调用它。这可以在这里看到: func alertBox(){ // create String objects for the title and the message let ti
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()
}
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方法。这样,我可以设置值,然后在以后的方法中获取值。我用过它,但它似乎根本不能保存我的价值观。我还尝试创建一个全局变量,然后将textfield的值存储到该变量中
i、 e
然后在后面的alertBox()函数中:
override func viewDidLoad() {
super.viewDidLoad()
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
}
var dc = DataController.sharedInstance
static var sharedInstance = DataController()
当我执行alert.addAction方法时,它成功地保存了(如下所示):
但是,在该方法之外打印时,只向我打印了一个0.0值
我的代码有什么错误吗?请告知
self.dc.setUserInput(..)中的p.S.dc是一个变量,我在其中声明了DataController类
在TableViewController类中:
var userInput : Double = 0.0
func getUserInput() -> Double{
return userInput
}
func setUserInput(userI: Double){
userInput = userI
return
}
var dc = DataController.sharedInstance
static var sharedInstance = DataController()
在DataController类中:
var userInput : Double = 0.0
func getUserInput() -> Double{
return userInput
}
func setUserInput(userI: Double){
userInput = userI
return
}
var dc = DataController.sharedInstance
static var sharedInstance = DataController()
您可以轻松地为用户GPA值定义静态全局值,如下所示:
struct defaultsKeys {
static var userGPA:Double = 0.0
}
之后,您可以从警报框中的文本字段值设置此值:
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)")
defaultsKeys.userGPA = Double(textAlert)!
}
您可以通过调用在每个视图控制器中使用此userGPA
值:
defaultsKeys.userGPA
我已经设法解决了。是的,我一直在将其保存到DataController,但没有使用singleton方法。因此,请使用singleton方法保存和检索数据 i、 e 存储在变量中:
var value : Double = 0.0
在TableViewController中,调用:
Datacontroller.sharedInstance.value
感谢kkakkurt帮了我的忙,但这真的很简单。我不知道我怎么会忽视它 测试了它,它给了我相同的结果,但仍然无法存储。也许您可以在下面的示例中查看静态全局变量用法的一般视图: