1

私は動作がそれであることを望みます:

カスタム UIMenuItem をクリックすると、選択する UIMenuItems の別のリストが表示されます。私はその方法で実施しました。

@implementation CustomUIWebView{
    BOOL clickedShowSubMenu;
    NSArray *mainMenuItems;
    NSArray *subMenuItems;
}

-(id)initWithCoder:(NSCoder *)aDecoder{
    self = [super initWithCoder:aDecoder];
    if(self){
        UIMenuController *mc = [UIMenuController sharedMenuController];

        UIMenuItem *testSubMenu = [[UIMenuItem alloc] initWithTitle:@"TestSubMenu" action:@selector(testSubMenu:)];
        mainMenuItems = [NSArray arrayWithObjects:testSubMenu, nil];

        UIMenuItem *subItem1 = [[UIMenuItem alloc] initWithTitle:@"Item1" action:@selector(item1:)];
        UIMenuItem *subItem2 = [[UIMenuItem alloc] initWithTitle:@"Item2" action:@selector(item2:)];
        subMenuItems = [NSArray arrayWithObjects:subItem1, subItem2, nil];

        [mc setMenuItems:mainMenuItems];

        [NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onMenuItemDismissed:) name:UIMenuControllerDidHideMenuNotification object:nil];

        clickedShowSubMenu = NO;
    }
    return self;
}

- (void)testSubMenu:(id)sender{
    UIMenuController *mc = [UIMenuController sharedMenuController];
    [mc setMenuItems:subMenuItems];
    mc.menuVisible = YES; //from te doc, it say it would keep the menu not dismiss when this function end
    clickedShowSubMenu = YES;
}

- (void)item1:(id)sender{
}

- (void)item2:(id)sender{
}

- (void)onMenuItemDismissed:(id)sender{
    if(clickedShowSubMenu == YES){
        UIMenuController *mc = [UIMenuController sharedMenuController];
        [mc setMenuItems:mainMenuItems];
        clickedShowSubMenu = NO;
    }
}

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender{
    if(action == @selector(testSubMenu:))return YES;
    else if(action == @selector(item1:))return YES;
    else if(action == @selector(item2:))return YES;
    return NO;
}

@end

ロングタッチのテキストを選択して をクリックするとTest Sub Menu、「サブメニュー」が表示され、表示されるのItem1Item2同じ位置にTest Sub Menu表示されます。

しかし、問題は2回目以降。他のテキストを選択するとTest Sub Menu正しく表示されますが、クリックすると、最初に表示される古い位置に と が表示されますItem1Item2彼らの立場は決して変わりません。何が原因なのかわかりません。

編集 わかりました。UIWebViewで選択したテキストの座標(CGRect)を取得する方法を利用して? 選択範囲の四角形の境界を取得して[mc setTargetRect:theRect inView:self];前に言うmc.menuVisible = YES;

それは機能し、サブメニューはメインメニューとほぼ同じ位置を示します。おすすめですか?段落全体を強調表示すると、メインメニューが段落の下に表示され、サブメニューが段落の上に表示されるという問題はまだほとんどありません。

4

0 に答える 0