2013-05-13 4 views
1

화살표 방향을 위쪽으로 변경하려고 시도 할 때 맨 위의 막 대를 막지 못하게하여 응용 프로그램을 설정합니다. 여기에 내가 방향을 변경하는 데 사용되는 코드입니다 : 여기UIMenuController의 화살표 방향을 UIWebView에 표시하기 전에 화살표 방향을 변경하는 방법

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

을하고 결과, 솔직히 꽤 스트레스, 말 : enter image description here

그것은뿐만 아니라 내 아이폰에서 동일한 문제가 될 것으로 보인다.

누구든지이 문제를 조사 할 수 있습니까? 감사합니다

답변

5

연구의 일 후, 나는 마침내 웹보기의 메뉴 컨트롤러의 화살표 방향을 변경하려면이 방법을 찾을 수 있습니다. 먼저보기 컨트롤러의 viewDidLoad 메소드에서이 작업을 수행하십시오.

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

다음 두 가지 기능을 추가하면 화살표 방향이 항상 위를 향하게됩니다.이 경우 메뉴 바는 항상 텍스트 아래에 나타납니다.

-(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는 "올바른"방향으로 거의 즉시 다시 그릴 것입니다. –

0

Apple Doc에 따르면 화살표 방향은 화살표가 가리키는 방향을 설정합니다. 타겟 영역에 관련된 메뉴의 위치와 아무 관련이 없습니다. 또한 setTargetRect : inView 이외의 메뉴 위치를 제어하지 못하는 것 같습니다.

실제로 텍스트 아래에 메뉴를 배치하려면 "가짜"대상 영역을 설정하고 "실제"관심 영역을 가리 키도록 화살표 방향을 변경할 수 있습니다.

그러나 애플이 이런 식으로하는 이유가있을 수 있습니다. 내 추측? 손가락으로 텍스트를 선택하면 손이 텍스트 아래의 화면 부분을 가릴 것입니다. 메뉴가 나타나면 그다지 도움이되지 않습니다. 표준 UI 컨벤션과의 일관성을 유지하기 위해 노력하는 것은 대개 그럴만 한 가치가 없습니다.

once check this one

+0

난 그냥 최대 때마다 화살표 방향을 설정할 수 있도록 내가 UIMenuController의 업데이트 기능을 대체 할 수있는 방법이 있나요 (당신이 당신의 메뉴 바는 다른 위치에 표시하려면 같은 식으로, 당신은 다른 방향 UIMenuControllerArrowUp;을 변경할 수 있습니다) 보여주는거야? UIMenuController는 기본적으로 편집 메뉴가 보이기 직전과 메뉴에서 터치가 발생하기 바로 전에이 메서드를 호출합니다. – donkey

관련 문제