UIPopoverController 显示在另一个按钮上

Posted

技术标签:

【中文标题】UIPopoverController 显示在另一个按钮上【英文标题】:UIPopoverController is showing on the other button 【发布时间】:2013-08-16 12:36:04 【问题描述】:

当点击 UIButton 以显示 UIPopovercontroller 时,它会显示在另一个 UIbarbuttonite 上,并且它会显示空白的黑色不透明 UIPopovercontroller。

这是我实现的代码:

- (IBAction)buttonTapped:(id)sender 

UIButton *btnAction;

BookmarkViewController* bookmarkVC = [[BookmarkViewController alloc] init];

_buttonPopoverController = [[UIPopoverController alloc]
                                initWithContentViewController:bookmarkVC];

_buttonPopoverController.delegate = self;

CGRect popoverFrame = btnAction.frame;
[_buttonPopoverController setPopoverContentSize:CGSizeMake(320, 355) animated:NO];

//only required if using delegate methods

[_buttonPopoverController presentPopoverFromRect:popoverFrame
                                              inView:self.view
                            permittedArrowDirections:UIPopoverArrowDirectionUp
                                            animated:YES];

【问题讨论】:

您如何将UIButton *btnAction 设置为正确的按钮? 使用storyboard连接buttonTapped 那可能是你的问题。您需要根据提供给函数的(id)sender 的某些属性来选择按钮,或者只需将发送者分配给按钮:*btnAction = sender 【参考方案1】:
UIButton *btnAction=(UIButton*) sender;

【讨论】:

【参考方案2】:

你错过了 senderbtnAction

那是UIButton *btnAction=(UIButton *)sender;

试试这个,

- (IBAction)buttonTapped:(id)sender 

UIButton *btnAction=(UIButton *)sender;


UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *bookmarkVC = [storyboard instantiateViewControllerWithIdentifier:@"BookmarkViewController"];

_buttonPopoverController = [[UIPopoverController alloc]
                                initWithContentViewController:bookmarkVC];

_buttonPopoverController.delegate = self;

CGRect popoverFrame = btnAction.frame;
[bookmarkVC setContentSizeForViewInPopover:CGSizeMake(320, 355)];

//only required if using delegate methods

[_buttonPopoverController presentPopoverFromRect:popoverFrame
                                              inView:self.view
                            permittedArrowDirections:UIPopoverArrowDirectionUp
                                            animated:YES];

【讨论】:

有了这个改变,它现在显示在正确的 uibutton 下,但为什么它显示为空白。它应该显示带有添加、编辑和完成按钮的表格视图。 检查更新的答案:BookmarkViewController* bookmarkVC = [[BookmarkViewController alloc]initWithNibName:@"BookmarkViewController" bundle:nil]; 当点击 uibutton 以显示 uipopovercontroller 时,此更改会导致应用崩溃 书签视图控制器在情节提要中,但它是通过按钮点击操作方法附加的 检查更新的答案。并检查您的故事板名称和视图控制器是否与我给出的相同。【参考方案3】:

你的问题在这里

[_buttonPopoverController presentPopoverFromRect:popoverFrame
                                              inView:self.view
                            permittedArrowDirections:UIPopoverArrowDirectionUp
                                            animated:YES];

presentPopoverFromRect:popoverFrame 实际上应该是弹出框的 rect 而不是 UIButtonbtnAction 没有你还没有分配的框架,并且你在表演CGRect popoverFrame = btnAction.frame;

应该是这样的

[popover presentPopoverFromRect:CGRectMake(0.0, 0.0, 300.0, 50.0) inView:self.view
               permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];

希望这会有所帮助。

【讨论】:

根据the documentation:rect: The rectangle in view at which to anchor the popover window. [popover presentPopoverFromRect:CGRectMake(0.0, 0.0, 300.0, 50.0) inView:self.view allowedArrowDirections:UIPopoverArrowDirectionUp animated:YES];

以上是关于UIPopoverController 显示在另一个按钮上的主要内容,如果未能解决你的问题,请参考以下文章

如何在另一列上显示html表格的计算

无法修改hosts显示已在另一程序打开

Excel:如果在另一列中发现重复的单元格值,则突出显示绿色

单击一帧中的链接并在另一帧中显示 JSP

如何在另一列中显示最大日期金额?

在一页上的文本区域中写入,在另一页中显示文本数据[关闭]