美文网首页
视图以Popover样式呈现

视图以Popover样式呈现

作者: 冷武橘 | 来源:发表于2020-04-19 21:24 被阅读0次

一、简介

Popover样式就是点击某一个位置,视图将会以弹出的形式呈现出来。Popover仅覆盖部分屏幕,经常用于选定对象相关的项目列表。


屏幕快照 2018-09-06 下午2.35.47.png

在iPad开发中实现很容易,可以使用UIPopoverController。UIPopoverController是iPad开发中常见的一种控制器,而跟其他控制器不一样的是,它直接继承自NSObject,并非继承自UIViewController。UIPopoverController作为iPad的一种特有元素,但不能用于iphone开发中。在ios8以前也只能自定义view实现了,然到了ios8,新出了一个UIPopoverPresentationController类可以方便的用来管理视图以Popover样式呈现,这不仅适应于iphone也适用于iPad,后来到了ios9 UIPopoverController直接被苹果废弃,完全用UIPopoverPresentationController代替。

二、UIPopoverPresentationController

NS_CLASS_AVAILABLE_IOS(8_0)  @interface UIPopoverPresentationController 

UIPopoverPresentationController是用来管理视图从弹出出现到现实的呈现行为的,我们可以用这个实例对象去设置popover的各个方面的外观和行为。

几乎所有的情况下,都不必自己去创造一个实例。因为当我们present(呈现/弹出)一个控制器使用popover样式的时候,UIKit会自动为我们创建一个这个类的实例。我们可以通过控制器的popoverpresentationcontroller属性来重新获取UIPopoverPresentationController的实例,并且使用它来设置我们的popover的行为。

   PopViewController *vc=[[PopViewController alloc]init];

//设置弹出控制器的内容大小
   vc.preferredContentSize = CGSizeMake(200, 200);    

//设置弹出控制器的呈现方式是UIModalPresentationPopover
vc.modalPresentationStyle=UIModalPresentationPopover;
    
    //1、获取一个UIPopoverPresentationController对象
     UIPopoverPresentationController *poc = vc.popoverPresentationController;
    
    //2、设置pover的外观和行为
    
    //2.1弹出的位置源,也就是从哪个view上弹出
     poc.sourceView=button;
    
     //锚定popover的指定视图矩形。
     poc.sourceRect=CGRectMake(30, 60, 0, 0);
    /*箭头所指对应的区域.锚点的计算是这样的.首先根据sourceView. 在sourceView描绘出一块区域(CGRect),然后箭头指向这块区域的中心点.
     //当你想点设置为barButtonItem所在的位置,你只需要设置 poc.barButtonItem = 你想的Item,系统会自动在barButtonItem的位置弹出
     */
   
    //2.2 设置popover的箭头方向
    poc.permittedArrowDirections=  UIPopoverArrowDirectionUp;
    /*
     UIPopoverArrowDirectionUp = 1UL << 0,
     UIPopoverArrowDirectionDown = 1UL << 1,
     UIPopoverArrowDirectionLeft = 1UL << 2,
     UIPopoverArrowDirectionRight = 1UL << 3,
     UIPopoverArrowDirectionAny = UIPopoverArrowDirectionUp | UIPopoverArrowDirectionDown | UIPopoverArrowDirectionLeft | UIPopoverArrowDirectionRight,
     UIPopoverArrowDirectionUnknown = NSUIntegerMax
     };
     */
    poc.delegate=self;//<UIPopoverPresentationControllerDelegate>
    
    //3、呈现
    [self presentViewController:vc animated:YES completion:nil];



//实现该代理方法,返回UIModalPresentationNone值,可以在iPhone设备实现popover效果
-(UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller{

    return UIModalPresentationNone;
}
其它属性:
    1、popoverBackgroundViewClass用于显示popover背景内容的类。
      自定义的的背景类.用于替换弹出视图之后的背景.这个类必须继承        UIPopoverBackgroundView,且必须实现UIPopoverBackgroundViewMethods接口的方法.
     2、popoverLayoutMargins定义允许显示弹出窗口屏幕部分的边距。
     3、passthroughViews用户可以在弹出窗口可见时与之进行交互的视图数组。

相关文章

网友评论

      本文标题:视图以Popover样式呈现

      本文链接:https://www.haomeiwen.com/subject/tqgibhtx.html