3

我该怎么做呢?我知道我必须给弹出框一个视图控制器,它从中构造它的视图,但我不知道如何在 Interface Builder 中构造这个视图(比如添加标签和按钮等等)。

我是否只是在普通情节提要中进行,并且有一个随机不与其他任何东西连接的情节提要,坐在角落里?

我要创建另一个故事板吗?

即使我的项目都是故事板,我是否创建 xib?

我是否以编程方式创建它?

4

3 回答 3

8

由于您没有在问题中指定目标设备,所以我给了您 Ipad 答案

平板电脑:

转到您的故事板拖放一个viewcontrollertableviewcontroller它由您决定。然后在你的故事板上创建一个从所需的 segueviewcontroller到新的 dragged/dropped viewcontroller。选择你的 segue 为popOver.

在此处输入图像描述

在此处输入图像描述

确保在 segue 设置中选择一个锚点,如上图。然后你需要编辑你的 popover 的大小。如果它uiviewcontroller选择它的视图,如果它tableviewcontroller选择它在界面生成器左侧的表格视图并编辑它的大小。

第一的:

在此处输入图像描述

第二:

在此处输入图像描述

之后自定义您的弹出视图控制器(拖放视图控制器)添加按钮,标记任何您想要的。

如果您要在弹出窗口中执行其他操作:不要忘记创建新文件 -> uiviewcontroller 或 uitableviewcontroller 的子类。然后将它与故事板上新创建的视图控制器相关联。

在此处输入图像描述

苹果手机:

iphone中没有Popover控制器

但是您尝试使用第三方https://github.com/50pixels/FPPopover解决方案,该解决方案通过使用模仿 iphone 中的弹出行为QuartzCore

我会尝试以下:

第一的:

再次将 a 拖放uiviewcontoller到情节提要中,然后创建一个新文件-> 的子类uiviewcontroller

这个新uiviewcontroller的将坐在你故事板的角落里

然后将情节提要中的 uiviewcontroller 与新的 Created 文件相关联,假设您使用YourViewController. 给你的视图一个故事板ID并选择它的类名。

在此处输入图像描述

-(IBAction)buttonClicked:(UIButton*)okButton
{
    //the view controller you want to present as popover
    YourViewController *controller = [[YourViewController alloc] init]; 

    //if [[YourViewController alloc] init]; doesn't work try this
   // UIStoryboard* sb = [UIStoryboard storyboardWithName:@"MainStoryboard"
                                                     bundle:nil];
    //YourViewController *controller = [sb instantiateViewControllerWithIdentifier:@"YourViewController"]; 

    //our popover
    FPPopoverController *popover = [[FPPopoverController alloc] initWithViewController:controller]; 

    //the popover will be presented from the okButton view 
    [popover presentPopoverFromView:okButton]; 

    //no release (ARC enable)
    //[controller release];
}

注意:我之前没有使用过那个 FPPopover,所以不知道如何安排屏幕大小,但是他们的文档中必须有进一步的解释,只是阅读它。

于 2013-03-28T15:11:12.457 回答
2

iPhone 解决方案

由于 iOS 8.0 也可以为 iPhone 应用程序实现这一点!

目标视图控制器(应该出现在弹出窗口中的那个)需要符合' UIPopoverPresentationControllerDelegate '协议并且必须实现消息' adaptivePresentationStyleForPresentationController:traitCollection: '。除此之外,它的“ modalPresentationStyle ”应该是“ UIModalPresentationPopover ”,控制器应该是他自己的“ UIPopoverPresentationController ”委托。

以这种方式准备好视图控制器后,只需从您的 UINavigationBarItem(或其他任何东西)到目标视图控制器创建一个故事板 segue(类型:'Present As Popover')。

在此处输入图像描述

执行:

@implementation TestViewController

/*
 initWithCoder:

 */
- (instancetype)initWithCoder:(NSCoder *)pDecoder {
    //FLog;

    if (self = [super initWithCoder:pDecoder]) {

        self.modalPresentationStyle = UIModalPresentationPopover;
        self.popoverPresentationController.delegate = self;
    }
    return self;
}


#pragma mark - POPOVER PRESENTATION CONTROLLER DELEGATE

/*
 adaptivePresentationStyleForPresentationController:traitCollection:

 */
- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)pController
                                                               traitCollection:(UITraitCollection *)pTraitCollection {
    //FLog;

    return UIModalPresentationNone;
}

// ...

@end

当然,委托协议也可以在其他类中实现,但这种方式是最简单的:-)

于 2016-12-31T08:49:38.497 回答
1

我认为 iPhone 设备的更好方法是创建一个 View Controller,其 View 的背景颜色设置为清除。然后在这个视图中,您只需添加一个较小尺寸的视图,这将给出一个弹出窗口的外观。

呈现这个视图控制器将给出一个弹出窗口的外观。这是我采取的方法。如果用户点击父视图上较小视图边界之外的区域,您可以关闭视图控制器。

于 2015-02-26T17:46:16.323 回答