![](/img/trans.png)
[英]Table View Controllers created in Interface Builder have their bottom cells clipped and obscured on iPhone X
[英]Creating popover view controllers for Iphone in Interface Builder
我该怎么做呢? 我知道我必须给popover一个视图控制器,它构建它的视图,但我不知道如何在Interface Builder中构建这个视图(比如添加标签和按钮等等)。
我是否只是在普通的故事板中进行操作,并且有一个随机地与其他任何东西无关的故事板,坐在角落里?
我是否创建了另一个故事板?
即使我的项目都是故事板,我也会创建一个xib吗?
我是以编程方式创建的吗?
由于你没有在你的问题中指定目标设备,我给你Ipad答案
IPAD:
转到您的故事板,将viewcontroller
或tableviewcontroller
拖放到您的身上。 然后在故事板上从所需的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.