2012-07-05 51 views
1

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

我该如何在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); 
}), 
}; 

回答

0

根据该API docs,目标矩形定义了要显示相对于该菜单的区域 - 的iOS将或者显示以上或通过TargetRect限定的区域下面的菜单。

当您使此菜单可见时,UIMenuController将它定位为相对于屏幕上目标矩形的 ;这个矩形通常是 定义了一个选择。菜单出现在目标矩形的上方,或者如果没有足够的空间,则在其下方显示菜单 。菜单的指针是 ,放置在目标矩形顶部或底部的中心,因为 合适。确保在使 菜单可见之前设置跟踪矩形。您还负责检测,跟踪和显示所选内容。

该目标矩形(targetRect)通常为一个选择的边界矩形 。 UIMenuController将编辑菜单定位在这个 矩形的上方;如果菜单没有足够的空间,那么它将 放置在矩形下方。根据需要,菜单的指针位于目标矩形顶部或底部的 中心。 请注意,如果将目标矩形 的宽度或高度设置为零,则UIMenuController会将目标区域视为定位的线或点(例如插入脱字符或单点)。

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

+0

杰森您好。感谢您的回答。这为我阐明了一些事情。所以我需要将目标矩形设置为UIBarButtonItem的目标矩形。我该如何去获取/创建UIBarButtonItem的矩形? – startupsmith 2012-07-06 02:34:42

+0

尝试使用按钮的框架 – Jason 2012-07-06 11:18:15

+0

嗨贾森。我不是100%确定如何获得按钮的框架。我已经尝试过NavigationController.Toolbar.Subviews [1] .Frame。但仍然没有运气。 – startupsmith 2012-07-06 11:35:08

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]; 

将指向工具栏的中心,因此中心按钮在工具栏

+0

这样做的好处是,如果你有一个scrollView,当scrollView移动时不需要更新targetRect。 – Gallonallen 2013-05-31 13:32:04