2013-05-13 67 views
1

我正在嘗試將箭頭方向更改爲向上,以便在出現時它不會阻止爲應用程序設置的頂部欄。下面是我用來改變方向的代碼:如何在UIWebView中顯示之前更改UIMenuController的箭頭方向

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

這裏是結果,坦率地說,這是相當緊張:enter image description here

這似乎是對我的iphone同樣的問題也是如此。

任何人都可以看看這個嗎?謝謝

回答

5

後研發的天,我終於發現這種方式來改變網頁視圖菜單控制器的箭頭方向。 首先,請在您的視圖控制器的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]; 
} 
+0

很好的回答!奇怪的是一些邊緣情況下,這不起作用....我遇到了這樣可以正確移動箭頭的情況,iOS會以幾乎瞬間的「正確」方向重新繪製它。 – 2015-03-13 13:29:02

0

根據Apple Doc,arrowDirection設置箭頭指向的方向;它與菜單相對於其目標區域的位置無關。它也看起來像他們不能控制setTargetRect:inView之外的菜單定位。

如果您確實想將菜單放在文本下方,您可以設置「假」目標區域並將箭頭方向更改爲指向「真實」感興趣的區域。

但是,Apple可能會這樣做。我猜?如果你用手指選擇了一些文本,你的手可能會遮住文本下面的屏幕部分......所以如果菜單出現在那裏並不是很有幫助。爲了打破與標準UI慣例的一致性,通常不值得。

once check this one

+0

有什麼辦法,我可以覆蓋UIMenuController的更新功能,這樣我剛纔設置的箭頭方向,每當它顯示?因爲這裏是Update函數描述的片段:默認情況下,UIMenuController在編輯菜單變得可見並且在菜單中發生觸摸之前調用該方法。 – donkey 2013-05-13 08:21:53