PBPopinController 0.4.1

PBPopinController 0.4.1

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
发布上次发布2015年11月

Andrej Mihajlov维护。



  • 作者:
  • Andrej Mihajlov

一个从底部弹出的自定义控制器,就像键盘一样。

GIF Image

功能

  1. 支持内容控制器。
  2. 支持工具栏视图。
  3. 非模态的,创建自己的UIWindow并处理所有在内容区域内未占用的用户交互。
  4. 如果从表视图或集合视图控制器中提供,则在滚动时自行关闭。
  5. 使用与键盘相同的动画曲线和持续时间。
  6. 如果在已显示的情况下知道如何交换内容控制器,则无需不必要的动画。
  7. 与故事板一起工作,使用自定义PBPopinSeguePBModalPopinSegue

已知问题

  1. 解包不起作用。请手动关闭控制器。
  2. 如果控制器关闭,本身不关闭。请手动关闭。

欢迎所有贡献、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