在UIBarButton中显示UIMenuController单击

时间:2012-07-05 23:16:17

标签: xamarin.ios

我正在尝试在工具栏按钮中显示UIMenuController。我有下面的代码,但我不确定“SetTargetRect”方法应该是什么。

我应该在SetTargetRect方法中放置什么来显示菜单?

此代码中是否还有其他内容?

ToolbarItems = new UIBarButtonItem[] { 
new UIBarButtonItem ("Sort", UIBarButtonItemStyle.Bordered, (sender, e) => {
    var menu = UIMenuController.SharedMenuController;
    menu.MenuItems = new UIMenuItem[] {
        new UIMenuItem ("Current", new Selector ("SortRaceEntrants")),
        new UIMenuItem ("Movers", new Selector ("SortRaceEntrants")),
        new UIMenuItem ("Opening", new Selector ("SortRaceEntrants")),
        new UIMenuItem ("Number", new Selector ("SortRaceEntrants"))
    };
    //menu.SetTargetRect ();
    menu.SetMenuVisible (true, true);
}),
};

2 个答案:

答案 0 :(得分:1)

UIBarButtonItem继承自UIBarItem和NSObject,因此找到它们的框架并不容易,如果不是不可能的话。 UINavigationBar继承自UIView,因此是一个视图(去图)并有一个框架等。

我所做的是指向该视图中的UIBarButtonItem所在的矩形。

例如:

[myMenu setTargetRect:CGRectMake(10, 10, 20, 25) 
               inView:self.navigationController.navigationBar];

这将使UIMenuController'指向'在leftBarButtonItem。 工具栏可以使用相同的技术。

在你的情况下:

[menu setTargetRect:CGRectMake(0,0,40,40)
             inView:self.navigationController.toolBar];

将指向toolBar的中心,因此指向toolBar中的中心按钮

答案 1 :(得分:0)

根据API docs,目标矩形定义了您想要显示相对于菜单的区域 - iOS将显示TargetRect定义的区域上方或下方的菜单。

  

当您显示此菜单时,UIMenuController会对其进行定位   相对于屏幕上的目标矩形;这个矩形通常   定义一个选择。菜单显示在目标矩形上方或,   如果没有足够的空间,在它下面。菜单的指针是   放置在目标矩形的顶部或底部的中心,如   适当。在制作之前一定要设置跟踪矩形   菜单可见。您还负责检测,跟踪和   显示选择。

  

此目标矩形(targetRect)通常是边界矩形   一个选择。 UIMenuController将编辑菜单定位在此上方   长方形;如果那里的菜单没有足够的空间,那就是   将它放在矩形下方。菜单的指针放在   适当时,目标矩形的顶部或底部的中心。   请注意,如果您创建目标矩形的宽度或高度   零,UIMenuController将目标区域视为一条线或点   定位(例如,插入符号或单点)。

     

设置后,目标矩形不会跟踪视图;如果   视图移动(例如在滚动视图中会发生),您必须更新   相应的目标矩形。