UITextField无法响应轻触

3
我想在用户点击UITextField时突出显示文本。第一次点击字段时,该行为按预期工作。一旦我退出(辞去第一个响应者),然后再次点击进入,文本字段将无法恢复焦点,除非我双击或长按文本字段。
这是我的代码。
override func viewDidLoad() { 
    textField.delegate = self

    // tap gesture to resign first responder 
    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard(gestureRecognizer:)))
    self.view.addGestureRecognizer(tapGesture)
}

@objc func dismissKeyboard(gestureRecognizer: UITapGestureRecognizer) {
    textField.resignFirstResponder()
}


func textFieldDidBeginEditing(_ textField: UITextField) {

    // if I comment out this line or replace with a print statement, the text field regains focus on a single tap as expected        
    textField.selectedTextRange = textField.textRange(from: textField.beginningOfDocument, to: textField.endOfDocument)
}

如果我删除在textFieldDidBeginEditing中负责选择所有文本的代码,文本字段将成功地在单击后重新获得焦点(但显然不会突出显示文本)。
我尝试在textFieldDidBeginEditing中放置一个打印语句,当textField.selectedRange = ...行存在时,它不会被调用,直到双击或长按。 然而,如果我注释掉此行,则每次我点击文本字段时都会执行打印语句。

你应该意识到你试图实现的功能已经内置了。它是https://developer.apple.com/documentation/uikit/uitextfield/1619631-clearsoninsertion。虽然选择不可见,但它确实存在,以便编辑和输入可以替换内容。 - matt
我有一个设计要求,需要让选择可见。 - ntaj
我尝试将选择代码放置在DispatchQueue块中,但没有用 - ntaj
糟糕,我正要尝试那个。 - matt
1个回答

1
我这样修复它:

self.textField.resignFirstResponder()
self.textField.selectedTextRange = nil

我不知道为什么需要那个,而且我也不打算担心它。 :) - matt
我将它放入我的dismissKeyboard函数中,它完美地工作了。谢谢! :) - ntaj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接