iOS - 使用 StoryBoard 创建弹出视图

Posted

技术标签:

【中文标题】iOS - 使用 StoryBoard 创建弹出视图【英文标题】:iOS - Create an Popover View using StoryBoard 【发布时间】:2011-11-22 10:51:48 【问题描述】:

您好,现在我正在尝试使用 Xcode 创建一个 Pop-OverView 故事板。首先,我有

rootViewController, UIViewController, and UITableViewController

我希望 UIView 充当翻页,UITableView 将在 navigationBar 项目控制器下显示 popOver。

对于 UITableView,我想在 NavigationBar 控制器下制作一个 Pop-Over。问题是,当我触摸 Navigation 项以显示 UITableViewController 时,它显示正确,但是当我尝试关闭 Pop-Over View 时,它不会关闭。然后,导航项不能正常工作。当我多次触摸它时,它会显示多个 popOverView 实例。

这对我来说似乎没有意义。谁能帮助我或告诉我在哪里可以找到这方面的文档/教程?

更新:

对于 UIPopOverController,它现在似乎运行良好,但是当我多次触摸导航项时它仍然困扰着我。它将显示多个 PopOver 实例。我该如何处理它,所以它只会显示一个实例?

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,大部分都找到了解决方案here。基本上,每次按下按钮以显示或关闭弹出框时,您都会更改按钮的操作。这是我最终得到的代码:

@interface FilterTableViewController : UITableViewController 
    UIPopoverController *editPopover;
    id saveEditSender;
    id saveEditTarget;
    SEL saveEditAction;


-(void)prepareForSegue:(UIStoryboardPopoverSegue *)segue sender:(id)sender
    if([[segue identifier] isEqualToString:@"EditFilterSegue"])
        // Save the edit button's info so we can restore it
        saveEditAction = [sender action];
        saveEditTarget = [sender target];
        saveEditSender = sender;

        // Change the edit button's target to us, and its action to dismiss the popover
        [sender setAction:@selector(dismissPopover:)];
        [sender setTarget:self];

        // Save the popover controller and set ourselves as the its delegate so we can
        // restore the button action when this popover is dismissed (this happens when the popover
        // is dismissed by tapping outside the view, not by tapping the edit button again)
        editPopover = [(UIStoryboardPopoverSegue *)segue popoverController];
        editPopover.delegate = (id <UIPopoverControllerDelegate>)self;
    


-(void)dismissPopover:(id)sender

    // Restore the buttons actions before we dismiss the popover
    [saveEditSender setAction:saveEditAction];
    [saveEditSender setTarget:saveEditTarget];
    [editPopover dismissPopoverAnimated:YES];


-(BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController

    // A tap occurred outside of the popover.
    // Restore the button actions before its dismissed.
    [saveEditSender setAction:saveEditAction];
    [saveEditSender setTarget:saveEditTarget];

    return YES;


- (void)viewWillDisappear:(BOOL)animated

    [super viewWillDisappear:animated];

    // Before we navigate away from this view (the back button was pressed)
    // remove the edit popover (if it exists).
    [self dismissPopover:saveEditSender];

【讨论】:

我认为这种解决方法过于复杂,但这主要是个人喜好问题。 This answer 有我首选的解决方法,在同一问题的其他答案中还有更多。 @rickster 我同意,这看起来简单多了,我下次试试。

以上是关于iOS - 使用 StoryBoard 创建弹出视图的主要内容,如果未能解决你的问题,请参考以下文章

ios:如何关闭模态视图控制器,然后弹出推送的视图控制器

IOS-Storyboard控制器切换之Modal

如何在 iOS 中使用 Storyboard 创建自定义 UICollectionViewCell?

如何在选择图像时显示弹出框

iOS之Storyboard References

iOS开发UI篇—使用storyboard创建导航控制器以及控制器的生命周期