IOS IPad UIPopoverController 和 p

2020-06-09  本文已影响0人  越天高

UIPopoverController 使用步骤

  1. 设置内容控制器
    由于UIPopoverController直接继承自NSObject,不具备可视化的能力
    因此UIPopoverController上面的内容必须由另外一个继承自UIViewController的控制器来提供,这个控制器称为“内容控制器”
    在初始化UIPopoverController的时候传入一个内容控制器
- (id)initWithContentViewController:(UIViewController *)viewController

更改内容控制器

@property (nonatomic, retain) UIViewController *contentViewController;
- (void)setContentViewController:(UIViewController *)viewController animated:(BOOL)animated;
  1. 设置内容的尺寸
    显示出来占据多少屏幕空间
    方案1: 通过UIPopoverController对象设置
@property (nonatomic) CGSize popoverContentSize;
- (void)setPopoverContentSize:(CGSize)size animated:(BOOL)animated;

方案2: 通过内容控制器设置

@property (nonatomic) CGSize preferredContentSize;
  1. 设置显示的位置
    从哪个地方冒出来
    围绕着一个UIBarButtonItem显示(箭头指定那个UIBarButtonItem)
- (void)presentPopoverFromBarButtonItem:(UIBarButtonItem *)item 
permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections 
animated:(BOOL)animated;

围绕着某一块特定区域显示(箭头指定那块特定区域)

- (void)presentPopoverFromRect:(CGRect)rect 
inView:(UIView *)view 
permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections 
animated:(BOOL)animated;
  1. 关闭UIPopoverController
- (void)dismissPopoverAnimated:(BOOL)animated;

注意: 防止点击UIPopoverController区域外消失


iOS8.0之后的的popover
1.自定义控制器ContentViewController为内容控制器

//创建内容控制器
        let contentVC = UIViewController()
        contentVC.preferredContentSize = CGSize(width: 50, height: 100)
        contentVC.view.backgroundColor = UIColor.orange
        
        //2.设置modal效果
        contentVC.modalPresentationStyle = .popover
        
        //2.1设置弹出的方向
        contentVC.popoverPresentationController?.sourceView = view
        contentVC.popoverPresentationController?.sourceRect = sender.frame
        
        //2.2设置可以穿透的控件,
        contentVC.popoverPresentationController?.passthroughViews = [btn1, btn2]
        
        //设置背景图层
        contentVC.popoverPresentationController?.backgroundColor = UIColor.systemPink
        
        
        //弹出
        present(contentVC, animated: true, completion: nil)

常见错误

  1. popover还没消失就被销毁[UIPopoverController dealloc] reached while popover is still visible.
    当popover仍旧可见的时候,不准销毁popover对象
    在销毁popover对象之前,一定先让popover消失(不可见)

美团主页使用popController的逻辑

https://github.com/WhereFindYouAgin/swiftMeitTuanHD

上一篇 下一篇

猜你喜欢

热点阅读