popover是一种非常好的表现形式,让用户输入一些数据,进行复杂的选择,展示复杂的数据,用popover,咱们的App可以活得更滋润,但是在iOS8之前,popover只能在iPad中使用,iOS8之后,终于可以在iPhone中使用popover了,虽然早就有了第三方的支持,不过自己来实现一下岂不是更好? here we go.
1.新建一个single view application,这个不说了.
2.新建一个viewcontroller
,取名叫PopViewController
,勾选创建Xib,当然在SB中关联一个view controller也是OK的,这里我们用Xib吧.
3.让ViewController
(不是PopViewController啊亲们)遵循UIPopoverPresentationControllerDelegate
协议,同时实现adaptivePresentationStyleForPresentationController
方法,之后,该文件代码如下
class ViewController: UIViewController,UIPopoverPresentationControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
}
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle {
return .None
}
}
4.在SB中拖进去一个Button,并且绑定Outlet和点击事件,事件的代码如下
@IBOutlet var btn: UIButton!
@IBAction func btnTap(sender: AnyObject) {
let pop = PopViewController()
pop.modalPresentationStyle = .Popover
pop.popoverPresentationController?.delegate = self
pop.popoverPresentationController?.sourceView = btn
pop.popoverPresentationController?.sourceRect = CGRectZero
self.presentViewController(pop, animated: true, completion: nil)
}
运行,点击button,会出现效果如下
虽然效果不好,但是至少已经有一个弹出的窗口啦,下面来优化之
在PopViewController.xib
中添加一个segmented control
,让他和屏幕的中心对齐,宽相等,同时设置View背景色为灰色
修改btnTap
方法:
@IBAction func btnTap(sender: AnyObject) {
let pop = PopViewController()
pop.modalPresentationStyle = .Popover
pop.popoverPresentationController?.delegate = self
pop.popoverPresentationController?.sourceView = btn
pop.popoverPresentationController?.sourceRect = btn.bounds
pop.preferredContentSize = CGSizeMake(100, 100)
pop.popoverPresentationController?.permittedArrowDirections = .Down
self.presentViewController(pop, animated: true, completion: nil)
}
运行一下,效果如下
如果不需要箭头,可以
pop.popoverPresentationController?.permittedArrowDirections = .None
一般常见的popover的显示方式是点击navigationItem的时候显示一个可以滑动的table供用户选择,我们来实现一下,过程和上面一样
实现效果图:
不带箭头的
网友评论