【问题标题】:Cursor at the start of UITextFieldUITextField 开头的光标
【发布时间】:2016-10-25 07:01:24
【问题描述】:

ViewController 由两个名为 textName 和 textEmail 的 TextField 组成。视图控制器在 textName 上加载光标。 textName 包含预先填充的单词“@gmail.com”。

在从 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)

【问题讨论】:

    标签: ios swift uiviewcontroller uitextfield viewcontroller


    【解决方案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,如我上面的示例所示。

    【讨论】:

    • 我正在使用手动创建的 DidBeginEditing 操作。 textFieldDidBeginEditing 工作。
    【解决方案2】:

    第一个测试组代表UITextFieldDelegate

    TextField 委托在 viewDidLoad 中设置 Self 后

    示例

    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
        }
    

    【讨论】:

      猜你喜欢
      • 2011-05-09
      • 2019-11-19
      • 2011-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多