【发布时间】:2019-05-30 02:02:18
【问题描述】:
我有这样的视图层次结构:
视图控制器
UITableView
UITableViewCell
UITextField
我有我的自定义UITableViewCell 和textField,我的计划是让这个textField 在用户点击单元格后立即成为FirstResponder。第一个问题是textField 正在获取触摸事件,因此未选择单元格,因此当用户右击textField 时,未选择单元格,并且我无法更新选定的单元格 UI。我虽然可以在textField 上创建isUserInteractionEnabled=false,所以在用户点击textField 后,我的单元格中会有适当的选择行为。到目前为止,一切都很好。现在我想在我的自定义单元格中的setSelected 方法中处理这个选择。问题是,如果键盘已经在屏幕上并且我在textField 上执行becomeFirstResponder(),那么键盘就会隐藏并立即再次显示。通常我希望这个键盘会保持原位而不试图再次隐藏和显示。代码如下:
class StringFieldTableViewCell: UITableViewCell {
@IBOutlet weak var pinLine: UIView!
@IBOutlet weak var pinLineFocused: UIView!
@IBOutlet weak var textField: UITextField!
override func awakeFromNib() {
super.awakeFromNib()
self.selectionStyle = .none
self.textField.isUserInteractionEnabled = false
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
self.textField.isUserInteractionEnabled = selected
if selected {
self.textField.becomeFirstResponder()
}
self.pinLine.isHidden = selected
self.pinLineFocused.isHidden = !selected
}
}
有谁知道如何解决这个键盘显示/隐藏问题以及为什么键盘会先隐藏自己然后在很短的时间内显示?
【问题讨论】:
-
这种情况下最简单的方法是检查textField.isFirstResponder
-
不,这不是重复的。我以前看过这个,但它并没有帮助我隐藏/显示键盘问题。 @IBAction
isFirstResponder如何帮助我解决我描述的这个键盘问题? -
如果选择 && !textField.isFirstResponder { textField.becomeFirstResponder() }
-
嗯。这是行不通的。当我选择不同的单元格时,键盘会隐藏和显示。
标签: ios swift uitableview uitextfield uiresponder