Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Interface Builder中为Iphone创建popover视图控制器_Iphone_Ios_Objective C_Uipopovercontroller_Uistoryboard - Fatal编程技术网

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

在Interface Builder中为Iphone创建popover视图控制器,iphone,ios,objective-c,uipopovercontroller,uistoryboard,Iphone,Ios,Objective C,Uipopovercontroller,Uistoryboard,我该怎么做呢?我知道我必须给popover一个视图控制器,它从中构造视图,但我不知道如何在Interface Builder中构造这个视图(比如添加标签和按钮等等) 我是不是只是在普通的情节提要中做,然后在角落里有一个情节提要,它随机地与其他任何东西都没有连接 我是否要创建另一个故事板 即使我的项目都是故事板,我也要创建一个xib吗 我是按程序创建的吗?因为你的问题中没有指定目标设备,所以我给了你Ipad的答案 IPAD: 转到情节提要拖放viewcontroller或tableviewcont

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

我是不是只是在普通的情节提要中做,然后在角落里有一个情节提要,它随机地与其他任何东西都没有连接

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

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


我是按程序创建的吗?

因为你的问题中没有指定目标设备,所以我给了你Ipad的答案

IPAD:

转到情节提要拖放
viewcontroller
tableviewcontroller
由您决定。然后在情节提要上创建一个从所需的
viewcontroller
到新拖放的
viewcontroller
的序列。选择您的音乐作为
popOver

确保在如上图所示的序列设置中选择锚定。然后,您需要编辑您的popover的大小。如果是
uiviewcontroller
选择其视图,如果是
tableviewcontroller
选择界面生成器左侧的tableview并编辑其大小

第一:

第二:

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

如果要在popover中执行其他操作: 不要忘记创建uiviewcontroller或uitableviewcontroller的新文件->子类。然后将其与故事板上新创建的viewcontroller关联

IPHONE:

iphone中没有Popover控制器

但您尝试使用第三方解决方案,通过使用
QuartzCore

我会尝试以下方法:

第一:

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

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

然后将情节提要中的uiviewcontroller与新创建的文件相关联,假设您使用
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,所以不知道如何安排屏幕大小,但他们的文档中必须有进一步的解释,请阅读

我认为iPhone设备的更好方法是,创建一个视图控制器,其视图的背景颜色设置为“清除”。然后,在这个视图中,您只需添加一个较小的视图,它将显示一个弹出窗口


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

iPhone解决方案

因为iOS 8.0也可以在iPhone应用程序中实现这一点

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

以这种方式准备视图控制器后,只需从UINavigationBarItem(或其他任何内容)到目标视图控制器创建一个故事板序列(键入:“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

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

它将在应用程序中的多个位置显示,还是仅在一个位置显示?非常好,谢谢。但是,如果我使用的是FPPopover库(iPad popover的iPhone端口),它只需要一个popover视图,我可以创建一个普通的segue吗?如果你不知道的话,我完全理解,我错误地认为两者都是一样的(大多数事情似乎都是一样的)。@DougSmith是的,ipad和iphone并非一切都是一样的,所以你不能在iphone情节提要中创建popover segue。当您尝试在iphone中执行segue(推送,模式)时,segue将替换当前视图,因此无法工作。如果你尝试定制segue,也许你能做到,但我怀疑。因此,您无法使用segue for Iphone进行此操作,我将尝试编辑我的答案,并为您提供可能的解决方案。@DougSmith尝试我的Iphone答案,但不确定是否有效。@SpaceDust您好,我已完成弹出视图。问题是,我在弹出视图中有一个按钮。当我按下该按钮时,弹出视图将被取消。我试了一天,但找不到解决办法。你的任何想法都会对我很有帮助。非常感谢。@Vino在您的buttons方法调用中
[self-dismissViewControllerAnimated:YES completion:NULL]如果这不起作用,发布一个问题,我相信如果你展示你的代码,人们会回答它