我棘手的问题是:
我有2个UITextView按钮。 就像你知道的那样,当我按下UITextView时,会出现键盘。嗯,这不是我想要的。
我想根据特定的@IBAction录音来启用/禁用显示器的键盘。
方案如下: - 第一个按钮(键盘图标)允许用户显示键盘以在其中一个UITextView中键入内容,并在顶部显示FirstResponder init。
我已经知道有:
isUserInteractionEnabled
和
textViewDidBeginEditing
但它并不适合和/或解决我的问题。
这里的屏幕更加明确(不要介意第三个绿色验证按钮,它仅适用于.POST功能):
感谢您的帮助!
答案 0 :(得分:2)
如果我正确理解您的问题,您不希望键盘在用户点击textField时出现,而是只有当用户点击键盘按钮时才会出现,并且在点击其他按钮时应该忽略。
所有发布的答案主要只关注显示键盘的第二部分,并在点击按钮时解除它们。更棘手的是当用户点击textField时阻止键盘出现:)
您可以尝试的可能解决方案及其缺点:
解决方案1:
尝试设置文本字段isEnabled = false
,确保这会阻止用户点击textField时出现键盘但是猜测即使在调用textfield.becomeFirstResponder()
时也不会显示键盘啊麻烦:)
解决方案2:
实施UITextField委托的textFieldShouldBeginEditing
并根据是否使用tapped on button或textField本身来回显真或假。
当然可行但你需要找出方法告诉textFieldShouldBeginEditing
为什么它会因为按钮而触发,或者因为触摸textField会再次发生并发症。
我的解决方案:
使用2个textFields。一个人永远禁用用户交互并使用另一个textField,这个文本将永远不会出现在用户身上,但会在需要时显示键盘。
足够的谈话让代码:)
第1步:
让我们说屏幕上显示的textField名为textField
textfield.isEnabled = false
这将确保您所做的一切都不会出现键盘。
第2步:
创建第0帧的临时textField(用户永远不能点击:P)
tempTextField = UITextField(frame: CGRect.zero)
tempTextField.delegate = self
self.view.addSubview(tempTextField)
第3步:
现在,当用户点击显示键盘按钮时,请使用临时textField第一响应者
tempTextField.becomeFirstResponder()
当用户点击tempTextField的其他按钮resignFirstResponder
时。
tempTextField.resignFirstResponder()
第4步:
但等待用户输入任何内容时,我的textField就会显示。等等只需实现
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if textField == tempTextField {
self.textfield.text = (self.textfield.text ?? "") + string
}
return true
}
修改强>
您实际上并不需要两个textField,您也可以使用UILabel
和UITextField
来实现相同的目标。我选择了UITextField,因为我不确定你的其他要求是什么!
问题已解决。希望它有所帮助:)
答案 1 :(得分:0)
单击按钮时关闭KeyBoard的功能:
@IBAction func hideKeyboard() {
textView.resignFirstResponder()
}
让键盘出现的功能:
@IBAction func showKeyboard() {
textView.becomeFirstResponder()
}
答案 2 :(得分:0)
这样的事情应该有效:
class MyViewController: UIViewController, UITextViewDelegate {
@IBOutlet var yourTextView: UITextView
override func viewDidLoad() {
super.viewDidLoad()
yourTextView.delegate = self
}
@IBAction func showKeyboard(_ sender: UIButton) {
self.yourTextView.becomeFirstResponder()
}
@IBAction func hideKeyboard(_ sender: UIButton) {
self.yourTextView.resignFirstResponder()
}
}
答案 3 :(得分:0)
你说
但它并没有真正起作用。
为什么?
您可以使用(swift 3)禁用文本字段交互:
UIKeyboardWillHideNotification
接下来,当您单击键盘按钮时,您可以重新启用交互,这样当用户单击其中一个文本字段时,键盘就会打开。
在键盘关闭时(您可以看到{{1}}回调通知),您可以将交互设置为false。
答案 4 :(得分:0)
只需复制并粘贴简单代码即可为您嵌入键盘的附件按钮
func addKeyboardToolbar() {
let ViewForDoneButtonOnKeyboard = UIToolbar()
ViewForDoneButtonOnKeyboard.sizeToFit()
let button = UIButton.init(type: .custom)
button.setImage(UIImage.init(named: "login-logo"), for: UIControlState.normal)
button.addTarget(self, action:#selector(doneBtnfromKeyboardClicked), for:.touchUpInside)
button.frame = CGRect.init(x: 0, y: 0, width:UIScreen.main.bounds.width, height: 30) //CGRectMake(0, 0, 30, 30)
let barButton = UIBarButtonItem.init(customView: button)
ViewForDoneButtonOnKeyboard.items = [barButton]
postTextView.inputAccessoryView = ViewForDoneButtonOnKeyboard
}
@IBAction func doneBtnfromKeyboardClicked (sender: Any) {
self.contentView.endEditing(true)
}