您可以使用 menuFrame (只读属性)获取先前显示的 UIMenuController 的矩形,使用它可以计算另一个 UIMenuController 显示在同一位置的位置。
在即将展示第二个 UIMenuController 的 action 方法中,获取上一个 UIMenuController 的框架
CGRect previousRect = [[UIMenuController sharedMenuController] menuFrame];
CGRect newRect = CGRectMake(previousRect.origin.x + previousRect.size.width/2, previousRect.origin.y + previousRect.size.height, 0, 0);
大致你会得到箭头的位置。现在显示第二个 UIMenuController
UIMenuItem *testMenuItem1 = [[UIMenuItem alloc] initWithTitle:@"test1" action:@selector(test1ItemClicked)];
UIMenuItem *testMenuItem2 = [[UIMenuItem alloc] initWithTitle:@"test2" action:@selector(test2ItemClicked)];
[[UIMenuController sharedMenuController] setMenuItems:@[testMenuItem1,testMenuItem2]];
UIMenuController *menuController = [UIMenuController sharedMenuController];
[menuController setTargetRect:newRect inView:_readerWebView];
[menuController setMenuVisible:YES animated:YES];
因为 UIMenuController 是一个单例,如果你想显示以前的 menuItems,你必须再次设置它们。