2017-04-17 36 views
0

基本上,我想要一个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() 

回答

0

您可以轻松地定义用户GPA值这样的静态全局值:

struct defaultsKeys { 
     static var userGPA:Double = 0.0 
    } 

之后,您可以在警告框中的textField值中设置此值:

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 
+0

测试它,它给了我相同的结果,仍然没有设法存储。 –

+0

感谢您的帮助,虽然 –

+0

也许你可以在这个例子中看到静态全局变量用法的一般视图:http://stackoverflow.com/a/43466290/3401842 – kkakkurt

0

我已经设法解决这个问题。是的,我一直保存到DataController但没有单例方法。所以使用单例方法来保存和检索数据。

static var sharedInstance = DataController { 
     private init() 
} 

存储在一个变量:

var value : Double = 0.0 

而且在TableViewController,请致电:

Datacontroller.sharedInstance.value 

感谢kkakkurt帮助我,但真的很简单。我不知道我是如何忽略它的。

相关问题