2016-10-25 78 views
0

ViewController由兩個名爲textNametextEmail的TextFields組成。視圖控制器用光標在文本名稱上加載。 textName包含預填充詞「@ gmail.com」。UITextField開始處的光標

在從textName擊中鍵盤的返回鍵時,焦點移動到Textfield textEmail。這裏默認情況下,光標放在單詞「@ gmail.com」後面

我想將光標置於開始位置。即之前@ gmail.com

這是我的代碼。當我從textName中返回鍵時,光標會移至textEmail的開頭。但是當我直接點擊textEmail時,光標出現在預先填充的單詞之後。請幫幫我!

func textFieldShouldReturn(textField: UITextField) -> Bool { 

     if textField == self.textName{ 
      textEmail.becomeFirstResponder() 
      let desiredPosition = textEmail.beginningOfDocument 
      textEmail.selectedTextRange = textEmail.textRangeFromPosition(desiredPosition, toPosition: desiredPosition) 
     } 

     if textField == self.textEmail{ 


      dismissViewControllerAnimated(true, completion: nil) 

     } 

     return true 
    } 

作爲一個說明,我也嘗試編輯也開始爲textEmail行動和下面的代碼添加,但它也不能工作。

let desiredPosition = textEmail.beginningOfDocument 
      textEmail.selectedTextRange = textEmail.textRangeFromPosition(desiredPosition, toPosition: desiredPosition) 

回答

1

試試這個:

func textFieldDidBeginEditing(_ textField: UITextField) { 
    if textField == self.textName{ 
     let beginning = textField.beginningOfDocument 
     textField.selectedTextRange = textField.textRange(from: beginning, to: beginning) 
    } 
} 

所以刪除textEmail.becomeFirstResponder()和使用textField.textRange代替textEmail.textRangeFromPosition

而在textFieldDidBeginEditing函數中,使用參數textField,如上面的示例所示。

+0

我是使用手動創建發起了DidBeginEditing動作。 textFieldDidBeginEditing工作。 – NKay

0

首先土特產品在viewDidLoad中

設置委託UITextFieldDelegate

您文本字段委託設置自我之後實例

textName.delegate = self 
textEmail.delegate = self 

然後複製這個方法在你的viewController

func textFieldShouldReturn(textField: UITextField) -> Bool 
    { 
     if textField == textName 
     { 
      textName.resignFirstResponder() 
      textEmail.becomeFirstResponder() 
      textEmail.text = "@gmail.com" 
      let newPosition = textField.beginningOfDocument 
      textEmail.selectedTextRange = textEmail.textRangeFromPosition(newPosition, toPosition: newPosition) 



     } 
     else if textField == textEmail 
     { 
      textEmail.resignFirstResponder() 
     } 
     return true 
    }