【发布时间】:2011-07-08 19:59:34
【问题描述】:
所以我花了一些时间寻找这个问题的答案,但到目前为止还没有找到任何答案。
我正在尝试从 UIInputAccessoryView 上的按钮呈现弹出框。我想从中显示弹出框的 UIBarButtonItem 有一个自定义视图,因此我可以使用图像。我这样创建按钮:
buttonImage=[UIImage imageNamed:@"tags.png"];
aButton=[UIButton buttonWithType:UIButtonTypeCustom];
[aButton setImage:buttonImage forState:UIControlStateNormal];
aButton.frame=CGRectMake(0.0, 0.0, buttonImage.size.width, buttonImage.size.height);
UIBarButtonItem* compButton2=[[UIBarButtonItem alloc]initWithCustomView:aButton];
[aButton addTarget:self action:@selector(tagIt:) forControlEvents:UIControlEventTouchUpInside];
当需要显示弹出框时,我会这样做:
CGRect tRect=[((UIButton*)sender) convertRect:((UIButton*)sender).frame toView:self.notePlainText];
NSLog(@"TagIt tRect: %f %f %f %f", tRect.origin.x, tRect.origin.y, tRect.size.width, tRect.size.height);
[self.popoverController presentPopoverFromRect:tRect inView:self.notePlainText permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
但我得到的是这样的:
弹出框看起来不错,但它应该出现在第一个按钮上时却出现在第二个按钮上。
然后我发现了这个问题:UIBarButtonItem with custom image and no border,我想,“啊,如果我从 barbuttonitem 呈现弹出窗口而不是这样做,也许效果会更好。代码子类 UIBarButtonItem 为了有一个带有图像而不是文本的按钮,并在调用操作时正确表示 barbuttonitem。这允许我使用 ...presentPopoverFromBarButtonItem...
所以我尝试了上述问题的第二个答案中的代码,并得到了更好的结果。弹出框按我的意愿指向按钮,但如果设备的方向不是纵向且按钮位于底部,则弹出框显示的方向错误:
最后,我要指出的是,我在程序的其他地方还有其他条形按钮项目,这些项目不在 UIInputAccessoryViews 中,它们可以正常出现并且没有问题。它似乎只发生在输入附件视图中。
这只是在:隐藏和显示键盘似乎使这项工作更好一些。查看按钮的框架 (CGRect) 数据,它不会在旋转之间发生变化,除非它被隐藏并带回。这是一个错误吗?
所以.. 我的问题是:从嵌入在 ui 附件视图中的条形按钮项中呈现弹出框的首选、最佳实践方式是什么?
非常感谢。
【问题讨论】:
-
你试过
[UIPopoverController presentPopoverFromBarButtonItem:(UIBarButtonItem *)item permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated]吗?如果您有条形按钮项,则最好这样做。 -
@bshirley - 是的,我确实尝试过。我在子类 uibarbuttonitem 上面引用的问题是为了更轻松地创建带有图像而不是文本的 barbuttonitem。当我这样做并使用... popoverfrombarbuttonitem... 结果是上面的第二张图片,其中弹出框出现在正确的位置但旋转不正确。
标签: ios cocoa-touch uipopovercontroller uibarbuttonitem uiinterfaceorientation