iPad开发之Popover
2015-11-25 15:43
274 查看
首先了解两个控制器:
popover相当于第二窗口或对话框,它展示的视图位于主界面顶部。通常,它通过箭头与主界面上的一个视图关联,一般该视图是用户用来召唤popover的按钮。popover可能是一个modal(模态)形式,禁止用户同界面剩下的部分交互;同时,popover也可能是这样的形式:用户点击外面的部分时,它就会消失。
iOS8及以后的版本中,popover实际上是一种presented view controller(被展示的视图控制器)的形式—-presented view controller的
一.准备一个Popover
为了显示popover,你需要展示一个视图控制器。通过设置视图控制器的modalPresentationStyle属性为.Popover,来将展示转变为popover展示。
但是,这还不足够,因为没有进一步的配置,运行时,popover一展示应用就会崩溃。如图:
额外的配置是通过
注意:视图控制器可以有两个属性:
presentationController
popoverPresentationController
二.Arrow source and direction(箭头源和方向)
barButtonItem:界面上的一个barbuttonitem,popover应当与其关联。popover的箭头会指向这个barbuttonitem。通常点击这个barbuttonitem会召唤popover。
sourceView,sourceRect:界面上的一个视图,popover应当与其关联。popover的箭头会指向这个视图,通常点击这个视图会召唤popover。其中,
下面是可以工作的最小的popover展示示例,通过点击界面上的UIButton来召唤popover,下面是示例代码:
ViewController.swift文件代码:
除了设置箭头源外,你还可以设置箭头方向,利用属性
三.Popover尺寸和位置
如果你不为popover提供尺寸的话,它也可以展示。但是你可能想要提供一个尺寸,因为默认的不一定是你想要的。你可以设置被展示的视图控制器的
回忆一下,视图控制器可以使用它的
…..未完待续
UIPopoverPresentationController:继承自
UIPresentationController
UIPresentationController:继承自
NSObject,它为被展示的视图(presented view controller)提供了视图和转场管理。可以通过被展示的视图的
presentationController属性来获取它。
popover相当于第二窗口或对话框,它展示的视图位于主界面顶部。通常,它通过箭头与主界面上的一个视图关联,一般该视图是用户用来召唤popover的按钮。popover可能是一个modal(模态)形式,禁止用户同界面剩下的部分交互;同时,popover也可能是这样的形式:用户点击外面的部分时,它就会消失。
iOS8及以后的版本中,popover实际上是一种presented view controller(被展示的视图控制器)的形式—-presented view controller的
modalPresentationStyle是
.Popover。presented view controller具有适配性。一个.Popover和.FormSheet类型的presented view controller在iPhone上会被默认设置为
.FullScreen类型。而且,如果你不想接受默认的设置,你也可以修改,让popover也可以作为popover出现在iPhone上。
一.准备一个Popover
为了显示popover,你需要展示一个视图控制器。通过设置视图控制器的modalPresentationStyle属性为.Popover,来将展示转变为popover展示。
let pop = Popover()//Popover是视图控制器类 pop.modalPresentationStyle = .Popover self.presentViewController(pop, animated: true, completion: nil)
但是,这还不足够,因为没有进一步的配置,运行时,popover一展示应用就会崩溃。如图:
额外的配置是通过
UIPopverPresentationController(负责展示这个popover)来实现的,将视图控制器的
modalPresentationStyle设置为
.Popover可以让它的
presentationController变成
UIPopverPresentationController,那么,视图控制器的
popoverPresentatonController指向
UIPopverPresentationController。
注意:视图控制器可以有两个属性:
presentationController
popoverPresentationController
二.Arrow source and direction(箭头源和方向)
UIPopverPresentationController至少需要你执行下面其中一个设置:
barButtonItem:界面上的一个barbuttonitem,popover应当与其关联。popover的箭头会指向这个barbuttonitem。通常点击这个barbuttonitem会召唤popover。
sourceView,sourceRect:界面上的一个视图,popover应当与其关联。popover的箭头会指向这个视图,通常点击这个视图会召唤popover。其中,
sourceView就是这个视图,而
sourceRect就是它的bounds。
下面是可以工作的最小的popover展示示例,通过点击界面上的UIButton来召唤popover,下面是示例代码:
ViewController.swift文件代码:
import UIKit class ViewController: UIViewController { var source : UIButton? override func viewDidLoad() { super.viewDidLoad() self.view.backgroundColor = UIColor.grayColor() let source = UIButton(frame: CGRectMake(0,100,100,44)) self.view.addSubview(source) self.source = source self.source!.backgroundColor = UIColor.orangeColor() self.source!.addTarget(self, action: "doButton:", forControlEvents: .TouchUpInside) } func doButton(sender: AnyObject) { let pop = Popover() pop.modalPresentationStyle = .Popover self.presentViewController(pop, animated: true, completion: nil) if let p = pop.popoverPresentationController { let v = sender as! UIView p.sourceView = v p.sourceRect = v.bounds } } }
除了设置箭头源外,你还可以设置箭头方向,利用属性
permittedArrowDirections设置,这是位掩码(bitmask),可能的值有
.Up、
.Down、
.Left、
.Right,默认是
.Any。
三.Popover尺寸和位置
如果你不为popover提供尺寸的话,它也可以展示。但是你可能想要提供一个尺寸,因为默认的不一定是你想要的。你可以设置被展示的视图控制器的
preferredContentSize来通过尺寸。
回忆一下,视图控制器可以使用它的
preferredContentSize来告诉父视图控制器它想要的尺寸是多少。UIPresentationController实现了UIContentContainer协议,presentation controller作为被展示的视图控制器的父视图控制器,所以你设置被展示的视图控制器的
preferredContentSize来通过尺寸。
if let p = pop.popoverPresentationController { let v = sender as! UIView p.sourceView = v p.sourceRect = v.bounds pop.preferredContentSize = CGSizeMake(100, 240) }
…..未完待续
相关文章推荐
- hadoop的mapreduce原理解析
- Drupal 7.31SQL注入getshell漏洞利用详解及EXP
- 在 Xcode中 修改文件中自动创建的Created by和Copyright
- 在Linux下安装IPython
- docker常用命令手册
- CentOS编译安装GCC
- 解决maven-dependency-plugin (goals "copy-dependencies", "unpack") is not supported by m2e.错误
- linux device tree源代码解析
- 利用putty在windows上通过脚本在远程Linux机器执行指令
- 【转载】4412开发板搭建最小linux系统
- Linux之/et/sysctl.conf配置文件详解
- 响应式web网站设计制作方法
- css3媒体查询实现网站响应式布局
- linux 配置 ftp 服务器以及 ftp 客户端登录
- Apache Spark学习:利用Eclipse构建Spark集成开发环境
- Apache的站点快速切换工具a2dissite和a2dissite
- 如何配置gethub(linux)
- Linux 多线程编程 线程属性
- @CentOS安装MySQL
- CentOS 修改主机全名