确定UIToolbar中UIBarButtonItem的x,y位置的最简单方法是什么?如何确定UIToolbar中UIBarButtonItem的位置?
我发现的唯一答案是any way to know where uibarbuttonitem has been drawn。
所有提出的答案似乎太复杂。应该有一种更简单的方式来获得该死的UIBarButtonItem的位置不在那里?
确定UIToolbar中UIBarButtonItem的x,y位置的最简单方法是什么?如何确定UIToolbar中UIBarButtonItem的位置?
我发现的唯一答案是any way to know where uibarbuttonitem has been drawn。
所有提出的答案似乎太复杂。应该有一种更简单的方式来获得该死的UIBarButtonItem的位置不在那里?
不幸的是,没有简单的方法来确定UIBarButtonItem的位置。 UIBarButtonItem本质上是一个NSObject,它只做两件事:描述工具栏按钮的外观和感觉,并将事件转发到指定的目标/动作选择器。
。现在,因为所有的按钮都UIToolbar的子视图,所有按钮事件都是通过各自的UIBarButtonItems路由,这是相当琐碎遍历你UIToolbar的所有子视图,当你发现一个按钮,它的目标是你的UIBarButtonItem的,只需获取该按钮的框架即可。有些代码:
UIToolbar *toolbar = <your toolbar>;
UIBarButtonItem *barButtonItem = <your item>;
UIButton *button = nil;
for (UIView *subview in toolbar.subviews) {
if ([subview isKindOfClass:[UIButton class]]) {
for (id target in [(UIButton *)subview allTargets]) {
if (target == barButtonItem) {
button = (UIButton *)subview;
break;
}
}
if (button != nil) break;
}
}
CGRect frame = button.frame;
利用UIBarButtonItems popovers时,这对我的作品。
- (void)buttonClicked:(id)sender{
{
CGRect buttonRect = [[sender view] frame];
}
我用johosher的做法得到利用斯威夫特一的UIBarButtonItem的位置。
由于我需要位置作为sourceRect为popoverPresentationController我不得不将其转换为self.view。我不确定,这是否是一个好的解决方案,但它工作得很好,弹出窗口展示了UIBarButtonItem的右侧。
let senderRect = sender.view!!.convertRect(sender.view!!.bounds, toView: self.view)
// additional code for the popover controller
alertController.modalPresentationStyle = UIModalPresentationStyle.Popover
alertController.popoverPresentationController?.sourceRect = senderRect
alertController.popoverPresentationController?.sourceView = self.view
谢谢你,这个作品完美的与斯威夫特2.0 –
更多的 'SWIFTY' SWIFT方式:
func userAction(sender: AnyObject) {
if let originView = sender.valueForKey("view") {
let frame = originView.frame //it's a UIBarButtonItem
} else {
let frame = sender.frame //it's a regular UIButton
}
}
的UIBarButtonItem不是的UIView的子类,即使它本质上是一个按钮。去搞清楚。
这似乎不适用于我在iOS 5中。 – Jon
它可以工作,如果你用UIControl替换UIButton。 –
编辑答案将UIButton更改为UIControl。 –