我该怎么做呢?我知道我必须给弹出框一个视图控制器,它从中构造它的视图,但我不知道如何在 Interface Builder 中构造这个视图(比如添加标签和按钮等等)。
我是否只是在普通情节提要中进行,并且有一个随机不与其他任何东西连接的情节提要,坐在角落里?
我要创建另一个故事板吗?
即使我的项目都是故事板,我是否创建 xib?
我是否以编程方式创建它?
我该怎么做呢?我知道我必须给弹出框一个视图控制器,它从中构造它的视图,但我不知道如何在 Interface Builder 中构造这个视图(比如添加标签和按钮等等)。
我是否只是在普通情节提要中进行,并且有一个随机不与其他任何东西连接的情节提要,坐在角落里?
我要创建另一个故事板吗?
即使我的项目都是故事板,我是否创建 xib?
我是否以编程方式创建它?
由于您没有在问题中指定目标设备,所以我给了您 Ipad 答案
平板电脑:
转到您的故事板拖放一个viewcontroller
或tableviewcontroller
它由您决定。然后在你的故事板上创建一个从所需的 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,所以不知道如何安排屏幕大小,但是他们的文档中必须有进一步的解释,只是阅读它。
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
当然,委托协议也可以在其他类中实现,但这种方式是最简单的:-)
我认为 iPhone 设备的更好方法是创建一个 View Controller,其 View 的背景颜色设置为清除。然后在这个视图中,您只需添加一个较小尺寸的视图,这将给出一个弹出窗口的外观。
呈现这个视图控制器将给出一个弹出窗口的外观。这是我采取的方法。如果用户点击父视图上较小视图边界之外的区域,您可以关闭视图控制器。