我该怎么做呢?我知道我必须给popover一个视图控制器来构建它的视图,但是我不知道如何在Interface Builder中构建这个视图(比如添加标签和按钮以及诸如此类的东西)。
我是否只是在普通的故事板中进行操作,并且有一个故事板随机地与其他任何东西无关,坐在角落里?
我是否要创建另一个故事板?
即使我的项目都是故事板,我也会创建一个xib吗?
我是否以编程方式创建它?
答案 0 :(得分:8)
由于您未在问题中指定目标设备,我给了您Ipad答案
<强> IPAD: 强>
转到您的故事板,将viewcontroller
或tableviewcontroller
拖放到您的面前。然后在故事板上从所需的viewcontroller
创建一个segue到新拖放的viewcontroller
。选择您的segue为popOver
。
确保在segue设置中选择锚点,如上图所示。然后,您需要编辑弹出窗口的大小。如果其uiviewcontroller
选择其视图,如果其tableviewcontroller
选择其界面构建器左侧的表视图并编辑其大小。
首先:
第二
之后定制你的弹出视图控制器(拖放视图控制器)添加按钮,标记你想要的任何内容。
如果你打算在你的popover中做更多的事情: 别忘了创建新文件 - &gt; uiviewcontroller或uitableviewcontroller的子类。然后将它与故事板上新创建的viewcontroller关联。
<强> IPHONE: 强>
iphone中没有Popover控制器
但您尝试使用QuartzCore
我会尝试以下:
首先:
再次将uiviewcontoller
拖放到故事板,然后创建新文件 - &gt; 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因此不知道如何安排屏幕尺寸,但必须在文档中进一步解释才能阅读。
答案 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')到目标视图控制器。
实现:
@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
当然委托协议也可以在其他类中实现,但这种方式最简单: - )