我的问题类似于此< question> ,其中OP的目标是将UIBarButtonItems数组显示为navigationItem.rightBarButtonItems而没有barbuttons的轮廓/边框。他的解决方案,使用UIButton自定义视图初始化UIBarButtonItem,提供了所需的外观,并且UIButton目标/操作模式适用于调用方法,但不适用于定位UIPopoverController。
我要做的是在弹出窗口中显示一个actionSheet(即在iPad上显示一个actionSheet),并且(从另一个按钮)显示一个打印控制器弹出框,弹出箭头指向所选的条形按钮,作为rightBarButton项目在iPad Mail应用程序中执行。
问题是,提供actionSheet或popover的方法:
[UIActionSheet showFromBarButtonItem:bbtn animated:YES];
或
[UIPrintInteractionController presentFromBarButtonItem:printButton animated:YES completionHandler:completionHandler]
不起作用。此外,用于从CGRect呈现的方法,例如,
[controller presentFromRect:rect inView:self.view animated:YES completionHandler:completionHandler]
不要正确定位弹出指针。
我尝试使用UIView convertRect:toView:
转换按钮框并从转换后的rect中显示弹出窗口,但我做错了或者无法从没有框架属性的UIBarButtonItem superview正确转换。弹出窗口但弹出箭头未指向所选按钮。
答案 0 :(得分:2)
尝试在导航控制器的视图坐标中计算转换后的按钮帧。 E.g。
CGRect convertedRect = [self.navigationController.view convertRect:button.bounds fromView:button];
[controller presentFromRect:convertedRect inView:self.navigationController.view animated:YES completionHandler:completionHandler];
答案 1 :(得分:0)
我和你有完全相同的问题。 我找到的一个解决方案是使用完全透明的图像作为UIBarButton项目的背景。
UIBarButtonItem *button = [[BWBarButton alloc] initWithImage:[UIImage imageNamed:imageName] style:UIBarButtonItemStylePlain target:target action:selector];
[button setBackgroundImage:[UIImage imageNamed:@"barimage"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
此处barimage
是60x60透明图像。我认为你可以使用1x1px图像。