繁体   English   中英

在Interface Builder中为Iphone创建popover视图控制器

[英]Creating popover view controllers for Iphone in Interface Builder

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

我是否只是在普通的故事板中进行操作,并且有一个随机地与其他任何东西无关的故事板,坐在角落里?

我是否创建了另一个故事板?

即使我的项目都是故事板,我也会创建一个xib吗?

我是以编程方式创建的吗?

由于你没有在你的问题中指定目标设备,我给你Ipad答案

IPAD:

转到您的故事板,将viewcontrollertableviewcontroller拖放到您的身上。 然后在故事板上从所需的viewcontroller创建一个segue到新拖放的viewcontroller 选择你的segue作为popOver

在此输入图像描述

在此输入图像描述

确保在segue设置中选择锚点,如上图所示。 然后,您需要编辑弹出窗口的大小。 如果它是一个uiviewcontroller选择自己的看法,如果其tableviewcontroller选择在界面生成器的左侧它的tableview和编辑它的大小。

第一:

在此输入图像描述

第二:

在此输入图像描述

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

如果你打算在你的popover中做更多的事情:别忘了创建新文件 - > uiviewcontroller或uitableviewcontroller的子类。 然后将它与故事板上新创建的viewcontroller关联。

在此输入图像描述

苹果手机:

iphone中没有Popover控制器

但是你尝试使用QuartzCore第三方https://github.com/50pixels/FPPopover解决方案来模仿iphone中的QuartzCore行为

我会尝试以下:

第一:

再次将uiviewcontoller拖放到故事板中,然后创建一个新文件 - > uiviewcontroller子类。

这个新的uiviewcontroller将位于故事板的角落

然后将故事板中的uiviewcontroller与新创建的文件相关联,假设您使用YourViewController创建了一个新文件名。 为您的视图提供一个storyboard 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因此不知道如何安排屏幕尺寸,但是在他们的文档中必须进一步解释才能阅读它。

我认为iPhone设备的更好方法是,创建一个View控件,其View的背景颜色设置为clear。 然后在此视图中,您只需添加一个较小的视图,该视图将显示弹出窗口的外观。

呈现此视图控制器将给出弹出窗口的外观。 这是我采取的方法。 如果用户点击父视图上不在较小视图范围之外的区域,则可以关闭视图控制器。

iPhone解决方案

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

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

在以这种方式准备视图控制器之后,只需从UINavigationBarItem(或其他任何内容)创建一个storyboard 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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM