2016-10-25 3 views
0

ViewController는 textName이라는 두 개의 TextField로 이루어져 있습니다. & textEmail. 컨트롤러가 textName에 커서가있는 상태로로드됩니다. textName은 미리 채워진 단어 "@ gmail.com"을 포함합니다.UITextField 시작시 커서

타격 키보드 반환 textName에서 키를 누르면 Textfield textEmail로 포커스가 이동합니다. 여기 기본적으로 커서는 "@ gmail.com"단어 뒤에 배치됩니다.

커서를 처음부터 가져 오려고합니다. 즉 @ gmail.com 앞에

다음은 내 코드입니다. textName에서 return 키를 누르면 커서가 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()를 제거하고 대신 textEmail.textRangeFromPositiontextField.textRange를 사용합니다.

그리고 textFieldDidBeginEditing 함수의 내부 함수는 위 예제에서와 같이 textField 매개 변수를 사용합니다.

+0

당신의 ViewController에서이 방법을 복사 예의 viewDidLoad

당신 텍스트 필드 위임 설정자가 한 후 위임 UITextFieldDelegate

설정 수동 cre 사용 DidBegin 편집 작업. textFieldDidBeginEditing가 작동했습니다. – NKay

0

먼저 가나는

textName.delegate = self 
textEmail.delegate = self 

다음 내가했다

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 
    }