Swift - 如何以编程方式显示“粘贴”工具提示菜单?

时间:2017-05-04 20:26:45

标签: ios swift keyboard

我正在开发一个发送图像的自定义键盘,我通过剪贴板发送图像,当用户点击图像时,我希望 "粘贴"工具提示显示在输入文本字段中。我怎么能在swift中做到这一点?

像这样: enter image description here

2 个答案:

答案 0 :(得分:3)

<强>更新

从您的问题来看,您似乎希望在键盘扩展程序的文本输入上显示菜单,而不是在应用程序中。没有API可以执行此操作,因为您仅限于UIInputViewControllerUITextDocumentProxy中可用的方法,无法访问应用程序的文本字段或菜单控制器。您必须在自己的应用中提供说明,或者考虑创建iMessage扩展程序(如果它是您的目标应用程序)。

如果您想在自己的应用中执行此操作

这有三个部分。

首先,要从文本视图中显示菜单,它必须是第一个响应者:

textView.becomeFirstResponder()

其次,你需要知道选择的矩形。如果没有插入符号或选择,我放弃了。我们不应该讨论这种情况,因为文本视图是第一个响应者。

guard let selectedRange = textView.selectedTextRange else { return }
let selectionLength = textView.offset(from: selectedRange.start to: selectedRange.end)

let targetRect : CGRect
if selectionLength > 0 {
    targetRect = textView.firstRect(for: selectedRange)
} else {
    targetRect = textView.caretRect(for: selectedRange.start)
}

最后,我们可以使用共享菜单控制器显示菜单控制器:

UIMenuController.shared.setTargetRect(textView.bounds, in: textView)
UIMenuController.shared.setMenuVisible(true, animated: true)

答案 1 :(得分:2)

文档中有代码可以执行此操作:

https://developer.apple.com/library/content/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/AddingCustomEditMenuItems/AddingCustomEditMenuItems.html

-std=c99

或在Swift中,定位textField.frame:

 UIMenuController *theMenu = [UIMenuController sharedMenuController];
 CGRect selectionRect = CGRectMake (currentSelection.x, currentSelection.y, SIDE, SIDE);
 [theMenu setTargetRect:selectionRect inView:self];
 [theMenu setMenuVisible:YES animated:YES];