UIBarButtonItem
不扩展UIView
,所以没有什么比框架属性更好的了.
但是有什么方法可以得到相对于应用程序UIWindow
的CGRect
帧吗?
UIBarButtonItem
不扩展UIView
,所以没有什么比框架属性更好的了.
但是有什么方法可以得到相对于应用程序UIWindow
的CGRect
帧吗?
你喜欢用private API吗?如果是,
UIView* view = thatItem.view;
return [view convertRect:view.bounds toView:nil];
当然,在瞄准应用store 时,没有人想要这个.一个more unreliable的方法,也使用了未记录的功能,但将通过苹果的测试,就是在子视图中循环寻找相应的按钮项.
NSMutableArray* buttons = [[NSMutableArray alloc] init];
for (UIControl* btn in theToolbarOrNavbar.subviews)
if ([btn isKindOfClass:[UIControl class]])
[buttons addObject:btn];
UIView* view = [buttons objectAtIndex:index];
[buttons release];
return [view convertRect:view.bounds toView:nil];
index
是.items
after removing all blank items数组中的条目的索引.这意味着按钮按递增的顺序排列,这可能不正确.一种更可靠的方法是在增加.origin.x
值的情况下对buttons
数组进行调整.当然,这仍然意味着工具栏按钮项目必须继承UIControl类,并且是工具栏/导航栏的直接子视图,这也可能不是.
正如您所看到的,在处理未记录的功能时存在很多不确定性.然而,你只是想在手指下弹出一些东西,对吗?uibarbuttoneim's .action
可以 Select 以下形式:
-(void)buttonClicked:(UIBarButtonItem*)sender event:(UIEvent*)event;
请注意event参数-您可以获得touch 的位置
[[event.allTouches anyObject] locationInView:theWindow]
或者使用
[[event.allTouches anyObject] view]
因此,不需要迭代子视图,也不需要使用未记录的特性来完成您想要做的事情.