根据link,我们应该使用一个单例UIMenuController
实例,该实例被称为编辑菜单。
问题是我想在不同情况下显示其他项目。例如,我只想在键盘启动时显示“复制”项目。并在点击表格视图行时显示“复制”和“回复”。
当我在UIMenuController
实例中添加“回复”时,也会在点击UITextField
时显示它。因此,我添加了以下代码:
func textViewDidBeginEditing(_ textView: UITextView) {
var nonReplyMenuItems: [UIMenuItem] = []
if let allMenuItems = UIMenuController.shared.menuItems {
for menuItem in allMenuItems {
if menuItem.title != "reply".localized {
nonReplyMenuItems.append(menuItem)
}
}
}
UIMenuController.shared.menuItems = nonReplyMenuItems
UIMenuController.shared.setMenuVisible(true, animated: true)
}
它在大多数情况下解决了问题,但并非全部。
当键盘抬起并在表格视图中点击一行时,将添加“回复”。然后,当我点击UITextView
时,回复也会显示在这里。
答案 0 :(得分:1)
您的情况似乎是这样的:
在文本字段上点按---->显示复制
点击表格视图--->显示复制并回复
文本字段上的选项卡---->显示复制并回复(您只希望复制显示)
据我所知,textViewDidBeginEditing
调用是在您的文本字段未编辑且点击时进行的;因此,如果您每次都通过打开该方法调用而拥有两个textfiled,但是当您在一个文本字段和另一个操作基础对象之间切换时,您的文本字段正在编辑并且其状态没有改变。
当您触摸表格视图时,您必须调用textfield.resignFirstResponder()
,因此当您再次点击文本字段时,textViewDidBeginEditing
再次调用时,问题在于隐藏了键盘。我更喜欢的一种更好的方法是添加功能,以触摸文本字段或手势来完成您在textViewDidBeginEditing
方法上编写的内容