一个从底部弹出的自定义控制器,就像键盘一样。
PBPopinSegue
或PBModalPopinSegue
。欢迎所有贡献、PR和评论!
#import <PBPopinController/PBPopinController.h>
@implementation MyViewController
- (IBAction)handleTapOnButton:(id)sender {
UIViewController* contentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"ContentVC"];
[[PBPopinController sharedPopinController] presentWithContentViewController:contentViewController
fromViewController:self
animated:YES
completion:nil];
}
@end
Popin控制器是一个单例,这意味着您可以通过[PBPopinController sharedPopinController]
始终访问它。
if([PBPopinController sharedPopinController].presented) {
[[PBPopinController sharedPopinController] dismissAnimated:YES completion:nil];
}
内容控制器可以通过self.popinController
访问相关联的弹层控制器。当内容控制器即将从弹层容器中删除或被其他控制器替换时,该属性设置为nil。
// Important to include this header
#import <PBPopinController/UIViewController+PopinController.h>
@implementation MyPopinContentViewController
- (IBAction)done:(id)sender {
[self.popinController dismissAnimated:YES completion:nil];
}
@end
默认情况下,PopinController将使用屏幕的一半来显示您的内容控制器。但是您可以在内容视图控制器上设置所需的preferredContentSize
来更改这一点。
您可以为弹层控制器提供一个工具栏视图,它放置在内容视图之上。弹层控制器使用intrinsicContentSize
来计算工具栏视图的大小。
请确保您没有与键盘或其他任何视图共享相同的工具栏视图,因为这可能导致崩溃,例如,键盘明确检查此内容并引发异常。
尽管弹层控制器在弹层显示之间共享相同的工具栏视图时处理得很好。
// setup toolbar accessory view
UIToolbar* accessory = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 100, 44)];
accessory.items = @[ /* ... */ ];
// create content controller
UIViewController* contentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"ContentVC"];
// assign accessory view
contentViewController.popinAccessoryView = accessory;
// present pop-in controller
[[PBPopinController sharedPopinController] presentWithContentViewController:contentViewController
fromViewController:self
animated:YES
completion:nil];
弹窗控制器附带了自定义的转场 PBPopinSegue
,您可以使用它在Storyboard中连接控制器。尽管如此,您仍然需要手动在代码中移除控制器。
请查看与此库一起提供的演示应用程序。
pod try PBPopinController