2016-10-19 80 views
1

我通過這篇文章Getting and Setting Cursor Position of UITextField and UITextView in Swift我得到的問題是選擇文本。設置UITextField的光標位置不工作(swift)

我遵循引用的帖子中的例子,我仍然沒有看到任何結果。 我創建了一個基本的SingleViewApplication,其中只有一個UITextField。

文本域在viewDidLoad中

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    textField.text = "foobar" } 

在@IBAction編輯設置爲「foobar的」難道我開始儘量選擇使用這篇文章所描述的方法在整個案文見下文。

@IBAction func EDB(_ sender: UITextField) { 
    let startPosition = textField.beginningOfDocument 
    let endPosition = textField.endOfDocument 
    textField.selectedTextRange = textField.textRange(from: startPosition, to: endPosition ) 
} 

我跳過了會選擇我textField中的所有文本。

它沒有。

我把兩個斷點,以顯示我的文本框的選擇範圍就行 讓指定startPosition .... 和一個最後一行 這些斷點執行婆textField.selectedTextRange!並繼續。

它確認其能有效地改變我的TextField的範圍

< _UITextKitTextRange:0x7fa42bb0d140>(6,0)的F

< _UITextKitTextRange:0x7fa42b922640>(0,6)的F

但是在用戶界面上沒有可見的選擇,光標停留在我的textField的末尾。

我缺少什麼讓UI顯示我選擇的範圍?

基本上我想在用戶輸入版本時預先選擇我的UItextField的特定範圍的文本。

回答

0

你可以在你的按鈕動作函數中試試這段代碼。

textfield.selectAll(textfield) 

希望能幫到你!

+0

延遲行動確實解決問題。 –

+0

延遲行動,以選擇原來的代碼我張貼的作品 讓指定startPosition = textField.beginningOfDocument 讓終端位置= textField.endOfDocument textField.selectedTextRange = textField.textRange(來自:指定startPosition,到:終端位置) eld.selectAll( textField) –

+0

和 textField。selectAll(textField)解決方案 因此,我假設範圍必須在鍵盤和textField被刷新後設置,如果在早期完成,則UI不會考慮範圍 –

0

嘗試將選擇範圍包裝到另一個方法中並延遲調用。我不完全瞭解你的情況,但是在一些情況下,小的延誤幫助了我。

這是斯威夫特2版:

@IBAction func EDB(sender: UITextField) { 
    performSelector(#selector(selectRange), withObject: nil, afterDelay: 0.01) 
} 

@objc private func selectRange() { 
    let startPosition = textField.beginningOfDocument 
    let endPosition = textField.endOfDocument 
    textField.selectedTextRange = textField.textRange(from: startPosition, to: endPosition) 
}