来自UIBarbuttonItems的弹出窗口在iPad上具有自定义视图,如在Mail应用程序中?

时间:2012-12-29 22:53:32

标签: ipad uipopovercontroller uibarbuttonitem

我的问题类似于此< 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]

使用UIButton发件人调用时,

不起作用。此外,用于从CGRect呈现的方法,例如,

[controller presentFromRect:rect inView:self.view animated:YES completionHandler:completionHandler]

不要正确定位弹出指针。

我尝试使用UIView convertRect:toView:转换按钮框并从转换后的rect中显示弹出窗口,但我做错了或者无法从没有框架属性的UIBarButtonItem superview正确转换。弹出窗口但弹出箭头未指向所选按钮。

2 个答案:

答案 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图像。

祝你好运!