swift - 带键盘的移动按钮,Swift
问题描述
@objc func keyboardWillShow(notification: NSNotification) {
if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
if self.textView.frame.origin.y == 0 {
let height = keyboardSize.height
self.textButton.frame.origin.y -= height
Log.debug("height: \(height)")
}
}
}
@objc func keyboardWillHide(notification: NSNotification) {
if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
if self.textButton.frame.origin.y != 0 {
let height = keyboardSize.height
self.textButton.frame.origin.y += height
Log.debug("height: \(height)")
}
}
}
我用适当的观察者调用了这 2 个函数。问题是在第二次键盘显示后键盘的高度发生了变化。这就是发生的事情=>
- 键盘显示 => 高度 346
- 键盘隐藏 => 高度 346
- 键盘显示 => 高度 243
- 键盘隐藏 => 高度 346
- 键盘显示 => 高度 243
这是我设置按钮的地方:
textButton.frame = CGRect(x: textView.frame.width - 95, y: textView.frame.height , width: 70, height: 70)
这是我从 ViewDidLoad() 调用的按钮函数
@objc func crossButtonTapped(_ sender:UIButton) {
self.textView.resignFirstResponder()
}
Ps 如果我希望键盘在按钮单击时显示并在第二个按钮单击时隐藏怎么办?
谢谢!
解决方案
首先,如果您想添加会粘在键盘上方的按钮,我建议使用“UIToolbar”。
关于你的PS,它非常简单:
@objc func crossButtonTapped(_ sender:UIButton) {
self.textView.isFirstResponder ? self.textView.resignFirstResponder() :
self.textView.becomeFirstResponder()
}
希望能帮助到你 :)
推荐阅读
- sql - Knex.js PostgreSQL 列引用“created_at”不明确
- python - 您如何找到在每个月底重新开始的值的滚动最大值?熊猫蟒
- neo4j - 即使在安装插件后,Nepo4j 也无法使用 apoc 功能
- java - Java Iterator 正在跳过一半元素
- javascript - Angular 中的 Counter Up v2 插件(动画计数器)
- oracle - Oracle 访问 SQL 中的可变数组元素
- android - 使用 OR 运算符进行条件渲染
- azure - 可以使用 Powershell 导出 Azure 中的资源配置吗?
- prestashop - 将 prestashop 从 1.7.5 更新到 1.7.7.2 后出错
- next.js - 使用 res.writeHead() 将标头发送到客户端后无法设置标头