기본적으로 UIViewController의 텍스트 필드 값을 원했고이 값을 사용하여 if-else 문을 수행했습니다.UIAlertController의 텍스트 필드 값을 가져와 다른 함수에서 사용하는 방법은 무엇입니까? (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 메소드를했다. 이 방법으로 값을 설정하고 나중의 방법으로 값을 얻을 수 있습니다. 나는 그것을 사용했지만 내 가치를 전혀 저장하지 않는 것 같습니다. 또한 전역 변수를 만든 다음 나중에 해당 변수에 텍스트 필드의 값을 저장하려고했습니다.
즉
나중에 alertBox() 함수에서 다음var textOfTF : Double = 0.0
그리고 : 그것은 관리
var userInput : Double = 0.0
func getUserInput() -> Double{
return userInput
}
func setUserInput(userI: Double){
userInput = userI
return
}
: 여기
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/설정 기능입니다
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. self.dc.setUserInput (..)의 dc는 DataController 클래스를 선언 한 변수입니다. DataController 클래스에서
var dc = DataController.sharedInstance
: 다음 TableViewController 클래스에서
static var sharedInstance = DataController()
테스트 한 결과 나에게도 같은 결과가 나타 났지만 아직 저장하지 못했습니다. –
그래도 도움을 주셔서 감사합니다 –
아마이 예제에서는 정적 전역 변수 사용에 대한 일반적인 모습을 볼 수 있습니다 : http://stackoverflow.com/a/43466290/3401842 – kkakkurt