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

时间:2013-03-28 14:57:39

标签: iphone ios objective-c uipopovercontroller uistoryboard

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

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

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

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

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

3 个答案:

答案 0 :(得分:8)

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

<强> IPAD:

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

enter image description here

enter image description here

确保在segue设置中选择锚点,如上图所示。然后,您需要编辑弹出窗口的大小。如果其uiviewcontroller选择其视图,如果其tableviewcontroller选择其界面构建器左侧的表视图并编辑其大小。

首先:

enter image description here

第二

enter image description here

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

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

enter image description here

<强> IPHONE:

iphone中没有Popover控制器

但您尝试使用QuartzCore

来模仿iphone中的popover行为的第三方https://github.com/50pixels/FPPopover解决方案

我会尝试以下:

首先:

再次将uiviewcontoller拖放到故事板,然后创建新文件 - &gt; uiviewcontroller的子类。

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

然后将故事板中的uiviewcontroller与新创建的文件相关联,假设您使用YourViewController创建了一个新文件名。为您的视图提供一个故事板ID并选择其类名。

enter image description here

-(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因此不知道如何安排屏幕尺寸,但必须在文档中进一步解释才能阅读。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

iPhone解决方案

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

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

以这种方式准备视图控制器之后,只需从UINavigationBarItem(或其他任何内容)创建一个storyboard segue(类型:'Present As Popover')到目标视图控制器。

enter image description here

实现:

@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

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