我正在尝试获取 UIBarButtonItem 的框架,它只是继承自 UIBarItem/NSObject。
问问题
7206 次
4 回答
6
在 iOS 5.0、5.1 和 6.0 中,使用以下方法。也可以轻松修改此方法以与 UIToolBar 一起使用。
- (UIControl *) findBarButtonItem:(UIBarButtonItem *)barButtonItem
{
UINavigationBar *toolbar = self.navigationController.navigationBar;
UIControl *button = nil;
for (UIView *subview in toolbar.subviews) {
if ([subview isKindOfClass:[UIControl class]]) {
for (id target in [(UIControl *)subview allTargets]) {
if (target == barButtonItem) {
button = (UIControl *)subview;
break;
}
}
if (button != nil) break;
}
}
return button;
}
用法:
UIControl *barButton = [self findBarButtonItem:myBarButtonItem];
CGRect barButtonFrame = barButton.frame;
于 2013-01-04T18:52:16.303 回答
6
这种方式最适合我:
UIView *targetView = (UIView *)[yourBarButton performSelector:@selector(view)];
CGRect rect = targetView.frame;
于 2013-08-20T21:00:07.337 回答
5
我知道您发布此问题是为了发布您找到的答案。我想我会添加一个替代解决方案,该解决方案没有在未来的 iOS 更新中中断的风险。
如果您UIBarButtonItem
使用自定义视图创建您的,那么您可以customView
访问UIBarButtonItem
. 的frame
将customView
反映其在工具栏或导航栏中的位置。
显然,此解决方案会阻止您使用标准的系统定义按钮。但是您可以使用自己的图像轻松复制它们。
通常,您将使用的自定义视图将UIButton
带有适当的图标图像。一个技巧是确保您启用按钮的showsTouchWhenHighlighted
属性,以便获得通常的高亮效果。
使用UIButton
您将在UIBarButtonItem
.
于 2013-01-04T19:04:18.237 回答
0
这是一种无需求助于无证行为或假设的方法。
不要使用 UIBarButtonSystemItem,而是使用带有自定义视图的 UIBarButtonItem。您可以使用以下技术从 UIBarButtonSystemItem 获取图像:
于 2017-07-04T03:13:24.703 回答