本文主要是介绍01-Popover跳转,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Popover跳转
1.1-简介
什么是Popover?
- UIViewController进行跳转的时候,可以设置跳转样式
- Popover样式是iOS8加入的新特性
- UIViewController进行跳转的时候,可以设置跳转样式
1.2-在StoryBoard中使用Popover
- 1.创建目标控制器
- 2.连线控制器,选择present as popover
- 3.设置popover大小
ViewController.swift
import UIKitclass ViewController: UIViewController {override func viewDidLoad() {super.viewDidLoad()// Do any additional setup after loading the view, typically from a nib.}override func didReceiveMemoryWarning() {super.didReceiveMemoryWarning()// Dispose of any resources that can be recreated.}//segue跳转override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {//获取目标控制器let desVC = segue.destinationViewController//获取目标控制器的popover对象let popover = desVC.popoverPresentationController//适配iPhone iOS会根据设备类型选择不同的Model展示效果,如果希望iPhone上面展示popover效果 则需要通过设置代理取消系统的自适应popover?.delegate = selfif segue.identifier == "function"{//设置popover的大小 当控制器为popover的目标控制器时,使用preferredContentSize可以设置popover的大小desVC.preferredContentSize = CGSizeMake(100, 100)}else if segue.identifier == "group"{//按照跳转popover的交互控件分类,主要由两种,一种是UIBarButtonItem,一种是非UIBarButtonItem,统称为来源视图,popover的参考点会默认设置在来源视图的左上角//修改popover参考点的位置 默认是来源视图的左上角 设置bounds为参考点时 则会将来源视图的中心点设置为参考点popover?.sourceRect = (popover?.sourceView?.bounds)!}}}extension ViewController:UIPopoverPresentationControllerDelegate
{//当设置Model展示的自适应效果时会调用func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle {//不进行自适应return UIModalPresentationStyle.None}// //如果iPhone上面 不取消自适应 也可以手动给popover添加一个导航栏 按钮来实现取消跳转
// func presentationController(controller: UIPresentationController, viewControllerForAdaptivePresentationStyle style: UIModalPresentationStyle) -> UIViewController? {
// let nv = UINavigationController.init(rootViewController: controller.presentedViewController)
// let btnDone = UIBarButtonItem(title: "Done", style: .Done, target: self, action: "dismiss:")
//
// nv.topViewController!.navigationItem.rightBarButtonItem = btnDone
//
// return nv
// }
//
// func dismiss(btn:UIButton)
// {
//
// print(btn.nextResponder()?.nextResponder()?.nextResponder())
// //该用法慎用~ 你懂得…… (逼格太高,一般人看不懂,不符合项目编码规范)
// //原理是 UIButton和UIViewController都是继承于UIResponder 利用响应链通过UIButton找到其所在的UINavigationController
// let nv = btn.nextResponder()?.nextResponder()?.nextResponder() as? UINavigationController
// nv?.dismissViewControllerAnimated(true, completion: { () -> Void in
//
// })
// }
}
1.3-总结
当控制器model跳转样式为popover样式时,可以通过目标控制器的popoverPresentationController获取对应的UIPopoverPresentationController对象
popover样式进行跳转的时候,iPad样式和iPhone样式区别
- iPad下默认是弹窗形式,且代码无法更改
- iPhone下默认是全屏显示,并且不会自带消失按钮
- 第一种解决方案:实现UIPopoverPresentationControllerDelegate,取消自适应
- 第二种解决方案:实现UIPopoverPresentationControllerDelegate,采用UINavigationController替换原有Controller,手动添加消失按钮
popover常用属性有两个,SourceView和SourceRect
- SourceView:来源视图,Storyboard跳转默认的是连线的那一个视图,代码跳转需要手动指定
- SourceRect:目标参考点,根据来源视图的种类分为两种,UIBarButtonItem和非UIBarButtonItem。
- 非UIBarButtonItem:默认在来源视图的左上角,当使用来源视图的bounds为参考点时,则会将来源视图的中心点设置为参考点
- UIBarButtonItem:系统自动适应,设置无效
popover箭头方向可以通过设置permittedArrowDirections属性更改
- 默认为Unknow(系统自动判断)
这篇关于01-Popover跳转的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!