2017-04-17 3 views
0

기본적으로 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() 

답변

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() 
} 

스토어 : 나를 도와 kkakkurt하는

Datacontroller.sharedInstance.value 

감사합니다,하지만 정말 간단했다 :

var value : Double = 0.0 

그리고 TableViewController에서

는 전화 . 나는 그것을 어떻게 간과했는지 모른다.

관련 문제