如何在UIWebView中显示之前更改UIMenuController的箭头方向

时间:2013-05-13 06:08:16

标签: iphone ios objective-c xcode

我正在尝试更改箭头方向,以便在出现时不会阻止我为应用程序设置的顶部栏。这是我用来改变方向的代码:

UIMenuController *menuController = [UIMenuController sharedMenuController];
[menuController setArrowDirection:UIMenuControllerArrowUp];

这就是结果,老实说,这是非常紧张的:enter image description here

在我的iphone上似乎也是同样的问题。

有人可以看一下吗?感谢

2 个答案:

答案 0 :(得分:5)

经过几天的研究,我终于找到了改变webview中菜单控制器箭头方向的方法。 首先,请在视图控制器的viewDidLoad方法中执行此操作。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(menuControllerWillShow:) name:UIMenuControllerWillShowMenuNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(menuControllerWillHide:) name:UIMenuControllerWillHideMenuNotification object:nil];

然后,添加这两个函数,然后箭头方向将始终指向上方,在这种情况下,菜单栏将始终显示在文本下方。 (同样,如果您希望您的菜单栏出现在其他位置,您可以将UIMenuControllerArrowUp;更改为任何其他方向。

-(void)menuControllerWillShow:(NSNotification *)notification{
    //Remove Will Show Notification to prevent
    // "menuControllerWillShow" function to be called multiple times
    [[NSNotificationCenter defaultCenter]removeObserver:self name:UIMenuControllerWillShowMenuNotification object:nil];

    //Hide the Original Menu View
    UIMenuController* menuController = [UIMenuController sharedMenuController];
    CGPoint origin = menuController.menuFrame.origin;
    CGSize size = menuController.menuFrame.size;
    CGRect menuFrame;
    menuFrame.origin = origin;
    menuFrame.size = size;
    [menuController setMenuVisible:NO animated:NO];

    //Modify its target rect and show it again to prevent glitchy appearance
    menuController.arrowDirection = UIMenuControllerArrowUp;
    [menuController setTargetRect:menuFrame inView:self.view];
    [menuController setMenuVisible:YES animated:YES];

}

-(void)menuControllerWillHide:(NSNotification *)notification{
    //re-register menuControllerWillShow
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(menuControllerWillShow:) name:UIMenuControllerWillShowMenuNotification object:nil];
}

答案 1 :(得分:0)

根据Apple Doc,arrowDirection设置箭头指向的方向;它与菜单相对于目标区域的位置无关。它看起来似乎没有让你对setTargetRect:inView之外的菜单定位有任何控制。

如果你真的想把菜单放在文本下方,你可以设置一个“假的”目标区域,并改变箭头方向指向感兴趣的“真实”区域。

然而,Apple可能就是这样做的原因。我猜?如果用手指选择一些文字,你的手可能会遮挡文本下方的屏幕部分...所以如果菜单出现在那里则不是很有帮助。通过标准UI约定来打破一致性并不值得付出努力。

once check this one