ios - 当 UITextView 辞职第一响应者时,导航栏项目不可点击
问题描述
我正在尝试在导航栏的右侧添加可点击按钮。UITextView
当 a处于活动状态时(即存在键盘时),可以单击该按钮,但一旦关闭键盘,就不再可单击该按钮。代码是:
import UIKit
class DetailViewController: UIViewController, UITextViewDelegate {
@IBOutlet weak var textview: UITextView!
let buttonDone = UIBarButtonItem(barButtonSystemItem: .done, target: nil, action: #selector(didClickDone))
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.rightBarButtonItem = buttonDone
self.textview.becomeFirstResponder()
}
@objc func didClickDone() {
print("Clicked on Done")
self.textview.resignFirstResponder()
}
}
因此,当UITextView
是第一响应者时,单击“完成”按钮会打印一条消息,并关闭键盘。
之后,无论我单击“完成”按钮多少次,都不会打印该消息。任何输入都非常感谢!
附加信息:
这DetailViewController
有一个嵌入在导航视图控制器中的列表视图控制器,如下所示:
下面是布局逻辑DetailViewController
列表视图控制器启用了手势识别器。不确定是否与此有关...手势识别器仅设置为长按。
更新1:我已经删除了方法中的textview.becomeFirstResponder()
行ViewDidLoad()
。当我进入视图时,键盘没有按预期显示。在这种状态下,单击按钮不会打印消息...
所以我认为这不是他的错resignFirstResponder()
...
更新2:我已经改成target: nil
但是target: self
没用...
但是感谢所有的回复!任何进一步的帮助表示赞赏...
解决方案
在您的内部viewDidLoad
,在那里创建UIBarButtonItem
并分配它,而不是将其声明为类成员。
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(didClickDone))
self.textview.becomeFirstResponder()
}
推荐阅读
- go - 在 Go 中定义自定义类型
- android - 当光标位于 Kotlin 的 EditText 中时,如何检测回压?
- c# - 在 ASP.NET Core 3.1 的 Startup.cs 中注入服务
- c# - 将导航栏变成带有汉堡图标的调整大小的菜单栏
- video-streaming - 限制 HLS m3u8 播放列表的播放范围
- database - 如何在没有类似 sql 的 UpdateExpression 的情况下在 DynamoDB 中执行更新?
- c++ - 从 long long 转换为 int 的意外行为
- python - TypeError: sort() 没有位置参数
- javascript - ejs不连续使用多个数组
- java - 从文件中读取,并异步保存到数据库