Grundsätzlich wollte ich den Wert des Textfelds eines UIViewController und dann verwenden Sie es, um eine If-else-Anweisung zu tun.Wie erhalte ich den Textfeldwert eines UIAlertControllers und verwende ihn in anderen Funktionen? (Swift 3)
Ich werde durch ein Wörterbuch durchlaufen und wenn der Wert (des Wörterbuchs) größer als und/oder gleich der Benutzereingabe ist, werde ich die Schlüssel durch eine Tabellenansicht anzeigen.
Ich habe eine Alarmbox, die beim Laden der App angezeigt wird. Ich habe eine Funktion erstellt und sie dann unter viewDidLoad() aufgerufen.
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)
}
Und mein viewDidLoad hier() Funktion: kann
override func viewDidLoad() {
super.viewDidLoad()
alertBox()
}
Wie Sie habe ich in einem Datacontroller Klasse eine get/set-Methode tatsächlich sehen, kann dies hier zu sehen. Auf diese Weise kann ich den Wert festlegen und dann den Wert in einer späteren Methode abrufen. Ich habe es benutzt, aber es scheint meine Werte nicht zu retten. Ich habe auch versucht, eine globale Variable zu erstellen und später den Wert des Textfelds in dieser Variable zu speichern.
dh
var textOfTF : Double = 0.0
Und später dann in der Alertbox() Funktion:
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())
*/
}
Hier sind meine get/set-Funktionen in meinem Datacontroller Klasse:
var userInput : Double = 0.0
func getUserInput() -> Double{
return userInput
}
func setUserInput(userI: Double){
userInput = userI
return
}
Es verwaltet zu speichern, wenn ich die alert.addAction Methode (was ist das) :
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())
}
}))
Aber dann außerhalb dieses Verfahren Druck nur einen 0.0 Wert für mich gedruckt.
Ist in meinem Code etwas falsch? Bitte beraten.
P.S. dc in self.dc.setUserInput (..) ist eine Variable, in der ich die DataController-Klasse deklariert habe.
In der Tableviewcontroller Klasse:
var dc = DataController.sharedInstance
In der Datacontroller Klasse:
static var sharedInstance = DataController()
getestet, und es gab mir das gleiche Ergebnis, immer noch nicht geschafft, zu speichern. –
Vielen Dank für Ihre Hilfe obwohl –
Vielleicht können Sie eine allgemeine Ansicht der Verwendung von statischen globalen Variablen in diesem Beispiel aussehen: http://Stackoverflow.com/a/43466290/3401842 – kkakkurt