Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何在UIWebView中显示之前更改UIMenuController的箭头方向_Iphone_Ios_Objective C_Xcode - Fatal编程技术网

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

Iphone 如何在UIWebView中显示之前更改UIMenuController的箭头方向,iphone,ios,objective-c,xcode,Iphone,Ios,Objective C,Xcode,我试图将箭头方向改为向上,这样当它出现时,它不会阻止我为应用程序设置的顶部栏。以下是我用来改变方向的代码: UIMenuController *menuController = [UIMenuController sharedMenuController]; [menuController setArrowDirection:UIMenuControllerArrowUp]; 老实说,结果是,压力很大: 我的iphone上也出现了同样的问题 有人能调查一下吗?谢谢根据箭头方向设置箭头指向的方向

我试图将箭头方向改为向上,这样当它出现时,它不会阻止我为应用程序设置的顶部栏。以下是我用来改变方向的代码:

UIMenuController *menuController = [UIMenuController sharedMenuController];
[menuController setArrowDirection:UIMenuControllerArrowUp];
老实说,结果是,压力很大:

我的iphone上也出现了同样的问题

有人能调查一下吗?谢谢

根据箭头方向设置箭头指向的方向;它与菜单相对于其目标区域的位置无关。看起来,除了setTargetRect:inView之外,它们也不会让您控制菜单的位置

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

然而,苹果这样做可能是有原因的。我猜呢?如果你用手指选择一些文本,你的手可能会遮挡文本下方的屏幕部分。。。因此,如果菜单出现在那里,就没有多大帮助了。刻意打破与标准UI约定的一致性通常是不值得的


经过几天的研究,我终于找到了在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;
更改为任何其他方向)


是否有任何方法可以覆盖UIMenuController的更新功能,以便在显示时将箭头方向设置为向上?原因这里是更新函数描述的片段:默认情况下,UIMenuController在编辑菜单可见之前以及菜单中出现触摸时调用此方法。回答得很好!奇怪的是,在一些边缘情况下,这不起作用……我遇到了这样的情况:这样可以正确地移动箭头,而iOS几乎可以在瞬间以“正确”的方向重新绘制箭头。
-(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];
}