2017-05-04 76 views

回答

3

更新

从你的问题,它看起来像你想要显示从键盘扩展,而不是在应用程序的文本输入菜单。由于您仅限于UIInputViewControllerUITextDocumentProxy中的可用方法,因此无法访问应用程序的文本字段或菜单控制器,因此没有API来执行此操作。您必须在自己的应用中提供说明,或者考虑创建一个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) 
+0

感谢您的回答,我很感激。 –

2

没有在文档代码做到这一点:

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

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

或斯威夫特,瞄准textField.frame:

let theMenu = UIMenuController.shared 
theMenu.setTargetRect(textField.frame, inView:self) 
theMenu.setMenuVisible(true, animated: true) 
相关问题