如何解决如何删除inputAccessoryView并将其替换为另一个视图? 步骤1:步骤2:
这是要求
- 在
UICollectionViewController
的键盘顶部具有输入附件视图的基本聊天应用程序 - 我使用
override var inputAccessoryView
添加此自定义输入附件视图,并在此函数中返回该自定义视图 - 我有一个需求,我需要在某个地方用另一个自定义输入附件视图替换此
inputAccessoryView
,以实现特定功能
我尝试过的事情
lazy var customInputAccessoryViewNumberOne: KeyboardView = {
let civ = KeyboardView(frame: .init(x: 0,y: 0,width: view.frame.width,height: 50))
civ.sendButton.addTarget(self,action: #selector(handleSend),for: .touchUpInside)
return civ
}()
override var inputAccessoryView: UIView? {
get {
return customInputAccessoryViewNumberOne
}
}
现在,当用户点击按钮时,我需要将{strong> customInputAccessoryViewNumberOne
完全替换为customInputAccessoryViewNumberTwo
@objc func handleNewInputAccessoryViewpressed() {
//how to remove customInputAccessoryViewNumberOne?
//how to add customInputAccessoryViewNumberTwo?
}
解决方法
只需两个步骤即可完成
步骤1:
在条件满足时设置输入的附件视图
步骤2:
在您的reloadInputViews()
或UITextField
实例上调用UITextView
。
以下代码段对此进行了解释。
func textField(_ textField: UITextField,shouldChangeCharactersIn range: NSRange,replacementString string: String) -> Bool {
let finalText = (textField.text as NSString?)?.replacingCharacters(in: range,with: string)
guard let txt = finalText else { return true }
if txt.count > 5 {
let greenView = UIView(frame: CGRect(x: 0,y: 0,width: UIScreen.main.bounds.width,height: 40))
greenView.backgroundColor = .green
textField.inputAccessoryView = greenView
} else {
let redView = UIView(frame: CGRect(x: 0,height: 40))
redView.backgroundColor = .red
textField.inputAccessoryView = redView
}
textField.reloadInputViews()
return true
}
,
因此,显然,每次显示或关闭键盘时,都会调用override方法(并且在显示或关闭键盘时会多次调用该方法,以便基于键盘的当前位置呈现视图。)
我们可以通过返回相应的UIView()在override var inputAccessoryView
方法中使用简单的标志和if语句替换输入附件。
-放弃或显示键盘,以便可以使用 willBecomeFirstResponder 和 resignFirstResponder
更改视图版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。