弹出框控制器无法正确显示视图

Posted

技术标签:

【中文标题】弹出框控制器无法正确显示视图【英文标题】:Popover Controller doesn't show view correctly 【发布时间】:2016-06-06 21:28:05 【问题描述】:

我有一个ViewController,当按下右侧的barButton 时,会显示一个弹出视图。弹出视图是一个表格视图控制器,

问题是当弹出框显示时,它只显示一个视图(不是表格视图)。

但是当popover被关闭时,你可以看到它在消失之前很快就翻转到了tableview。

为什么会这样?

更新:根据@sticker 在末尾添加popController.sourceView = sender;

- (IBAction)pressedButton:(id)sender 
    NSLog(@"Pressed Button");

    // grab the view controller we want to show
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    UIViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"Pop"];

    // present the controller
    // on iPad, this will be a Popover
    // on iPhone, this will be an action sheet
    controller.modalPresentationStyle = UIModalPresentationPopover;
    [self presentViewController:controller animated:YES completion:nil];

    // configure the Popover presentation controller
    UIPopoverPresentationController *popController = [controller popoverPresentationController];
    popController.permittedArrowDirections = UIPopoverArrowDirectionAny;
    popController.barButtonItem = self.barbutton;
    popController.delegate = self;

    // Added per @sticker
    popController.sourceView = sender;

还确定PopTableViewController<UITableViewDelegate, UITableViewDataSource>

在弹出框消失之前,我仍然没有显示任何 tableview:

(以下是弹出框被解除并动画消失后会发生的情况)

【问题讨论】:

你需要为 popController 设置 sourceView 并且不要忘记为你的 table view 设置 datasource 和 delegate。 @sticker 感谢您的回复!所以在我的ViewControllerpressedButton: 的末尾我添加了popController.sourceView = sender;,然后我转到PopTableViewController 并确保它有<UITableViewDelegate, UITableViewDataSource>。我得到了正确的表格视图行,但它仍然没有在表格视图中显示它(直到我关闭弹出框,然后它仍然在被关闭时快速显示表格视图)。我错过了你建议的任何部分,还是你知道我还需要什么?谢谢! @sticker 你知道吗,除非你有任何其他想法,否则它可能只是模拟器中的一个错误***.com/a/34108147/4205674 否则,如果您想添加您的评论作为答案,那么我可以标记为已解决 哦,我没有看到像一、二、三这样的行数据,所以我认为您的问题是设置了错误的 tableView。很高兴看到它运行良好。 【参考方案1】:

我只是试试这个,它工作正常 希望对你有帮助

 self.tbVC.modalPresentationStyle = UIModalPresentationPopover;
    UIPopoverPresentationController *popOverVC =   [self.tbVC popoverPresentationController];
    popOverVC.barButtonItem = sender;
    popOverVC.permittedArrowDirections = UIPopoverArrowDirectionAny;


    [self presentViewController:_tbVC animated:YES completion:nil];

【讨论】:

感谢您的帮助!

以上是关于弹出框控制器无法正确显示视图的主要内容,如果未能解决你的问题,请参考以下文章

在显示将 isModalInPresentation 设置为 true 的页面后,无法正常关闭弹出框

从弹出框 VC 中返回第一个视图控制器

显示弹出框使我的 iOS 8 应用程序崩溃

隐藏弹出框控制器

从模态呈现的视图控制器内部呈现 UIPopoverController

在表格视图中选择项目后无法关闭弹出框