2017-06-27 15 views
2

我試圖將UITextField對象轉換爲字符串,以便我可以將它傳遞給我的模型文件中的函數。但是,即使在名稱輸入文本字段中輸入了一些字符,然後在其外部單擊,也會打印出空白。爲什麼沒有存儲在那裏?將UITextField轉換爲Swift中的字符串

在視圖控制器文件:

@IBOutlet weak var nameInputText: UITextField! 

    override func viewDidLoad() { 


    super.viewDidLoad() 
    nameInputText.delegate = self 
    let text: String = nameInputText.text! 
    print(text) //this prints a blank 
    model.validateName(nametext: text) 

} 
+0

你在'viewDidLoad'裏面有這樣的代碼,所以你確定你的'nameInputText'中有任何文本嗎? –

+0

該代碼在控制器加載時發生。你是否首先在文本字段中放置文本? – kailoon

+0

我應該在哪裏放置文本以便將文本加載到變量中?是的,我在文本字段中輸入了一些字符。 – jean

回答

0

它應該像下面

@IBOutlet weak var usernameInputText : UITextField! 

     override func viewDidLoad() { 

     super.viewDidLoad() 
     usernameInputText.delegate = self 
    } 

    func ClickOnButton() 
    { 
     let text: String = usernameInputText.text! 
     print(text) //this prints My text 
     model.validateName(nametext: text) 
    } 

func textField(_ textField: UITextField, 
        shouldChangeCharactersIn range: NSRange, 
        replacementString string: String) 
     -> Bool 
    { 
     let text: String = usernameInputText.text! 
     print(text) //this prints My text 
     model.validateName(nametext: text) 
    } 
+0

如何以編程方式設置「UITextField」的文本,然後在不從UI中更改其文本的情況下如何將該文本發送到不同的函數而不是發送字符串本身? –

+0

嘗試獲取用戶輸入的文字。 – jean

+0

我已編輯答案...或者你可以調用每個文本輸入的方法,或者你可以顯示按鈕,並點擊該按鈕調用方法 –

0

viewDidLoad被稱爲之前你ViewController將是對用戶可見的,所以任何文本字段只能包含如果您之前設置了該文本(在InterfaceBuilder或代碼中),則爲文本。如果您想從該文本字段訪問用戶輸入,則應該在textFieldDidEndEditing中或者在您知道只有在用戶交互發生後才能調用的任何其他函數中執行此操作。

@IBOutlet weak var nameInputText: UITextField! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    nameInputText.delegate = self 
} 

extension ViewController: UITextFieldDelegate { 
    func textFieldDidEndEditing(_ textField: UITextField) { 
     model.validateName(nametext: textField.text) 
    } 
} 
+0

我應該添加let text:String = usernameInputText.text!函數textFieldDidEndEditing函數? – jean

+0

我試過這個擴展函數,它沒有編譯。超出範圍。 – jean

+0

編譯器可能與你的'model.validateName'函數有關,你在哪裏定義了它?不要在textField的文本上使用強制解包,但如果您需要存儲文本以備後用,而不僅僅用於調用驗證函數,那麼請將其存儲在變量中。 –

相關問題