我想用我自己的自定义视图来替换它(类似的看法,但是两倍高,以便我可以有两行按钮/自定义视图)。我该怎么做?
我知道没有简单的方法。我期待如果有一个简单的解决方案,它不会非常优雅。代码也不能使用任何私有API。
我真的真的不需要实现我自己的文本视图,重新实现文本选择和输入,并重新实现放大视图,这样我可以编写自己的UIMenuController克隆,如果有任何方法来避免它。对于应用程序的界面来说,我可以替换UIMenuController非常重要,所以如果没有其他答案,那么我可能会这样做。如果有人可以拯救我一个体面的时间,我会非常感激,并提出另一个更容易的方法!
解决方法 在开始之前,您必须先了解以下三件重要事项:1)您必须编写自定义菜单控制器视图,但我猜想你有这样的想法。我只知道一个commercial实现的自定义菜单控制器,但这不应该太难了。
2)在名为-canPerformAction的UIResponder中有一个有用的方法:withSender:。在UIResponder Class Reference中了解更多信息。您可以使用该方法来确定您的文本视图是否支持特定的标准 *** 作(在UIResponderStandardEditActions协议中定义)。
当您决定在自定义菜单控制器中显示哪些项目时,这将非常有用。例如,只有当用户的粘贴板包含要粘贴的字符串时,才会显示“粘贴”菜单项。
3)您可以通过监听UIMenuControllerWillShowMenuNotification通知来检测UIMenuController何时显示。
现在你知道所有这一切,这是我如何开始解决的:
1)当文本视图是第一个响应者时,收听UIMenuControllerWillShowMenuNotifications
- (voID)textVIEwDIDBeginEditing:(UITextVIEw *)textVIEw { [[NSNotificationCenter defaultCenter] addobserver:self selector:@selector(menuWillBeShown:) name:UIMenuControllerWillShowMenuNotification object:nil];}- (voID)textVIEwDIDEndEditing:(UITextVIEw *)textVIEw { [[NSNotificationCenter defaultCenter] removeObserver:self name:UIMenuControllerWillShowMenuNotification object:nil];}
2)显示您的自定义菜单控制器,而不是默认的UIMenuController
- (voID)menuWillBeShown:(NSNotification *)notification { CGRect menuFrame = [[UIMenuController sharedMenuController] menuFrame]; [[UIMenuController sharedMenuController] setMenuVisible:NO animated:NO]; // Don't show the default menu controller CustomMenuController *controller = ...; controller.menuItems = ...; // additional stuff goes here [controller setTargetRectWithMenuFrame:menuFrame]; // menuFrame is in screen coordinates,so you might have to convert it to your menu's presenting vIEw/window/whatever [controller setMenuVisible:YES animated:YES];}
杂项。 1)您可以使用全屏UIWindow来显示自定义菜单,以便它可以与状态栏重叠。
UIWindow *presentingWindow = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];presentingWindow.windowLevel = UIWindowLevelStatusbar + 1;presentingWindow.backgroundcolor = [UIcolor clearcolor];[presentingWindow addSubvIEw:controller];[presentingWindow makeKeyAndVisible];
杂项。 2)要确定哪些菜单项可以显示,可以使用所提到的-canPerformAction:withSender:
BOol canPaste = [textVIEw canPerformAction:@selector(paste:) withSender:nil];BOol canSelectAll = [textVIEw canPerformAction:@selector(selectAll:) withSender:nil];
杂项。 3)您必须通过在展示窗口上使用UITapGestureRecognizer来处理自己的菜单。
这不容易,但它是可行的,我希望它适用于你。祝你好运!
更新:
今天在cocoacontrols.com上d出一个新的菜单实现,您可能需要查看:https://github.com/questbeat/QBPopupMenu
更新2:
如this answer所述,您可以使用-caretRectForposition:获取文本视图的所选文本的框架。
以上是内存溢出为你收集整理的iphone – 如何选择文本时如何替换UIMenuController与我自己的视图?全部内容,希望文章能够帮你解决iphone – 如何选择文本时如何替换UIMenuController与我自己的视图?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)