这一小节我们主要通过代码来实现popover跳转来学习popover更多的一些常用属性
效果预览
ViewController.swift import UIKit class ViewController: UIViewController { @IBOutlet weak var testButton: UIButton! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } @IBAction func textButtonClick(sender: AnyObject) { print("你点击到人家啦~~~") } //UIBarButtonItem @IBAction func popoverButtonClick(sender: AnyObject) { //1.创建popover的目标控制器 let desVC = UIViewController() desVC.view.backgroundColor = UIColor.purpleColor() //2.设置控制器跳转样式 desVC.modalPresentationStyle = UIModalPresentationStyle.Popover //3.获取目标控制器的popover对象 let popoverVC = desVC.popoverPresentationController popoverVC?.backgroundColor = UIColor.redColor() //4.设置箭头方向 popoverVC?.permittedArrowDirections = UIPopoverArrowDirection.Unknown //4.跳转 //非UIBarBUttonItem if let btn = sender as? UIButton { //设置来源视图 popoverVC?.sourceView = btn //设置参考点 popoverVC?.sourceRect = btn.bounds //忽略外部点击 默认为false 如果设置为true 表示 点击外部popover不会消失 需要手动添加按钮消失 如果为false 表示点击外部视图 popover会消失 desVC.modalInPopover = false //设置点击穿透视图 popoverVC?.passthroughViews = [testButton] } else if let item = sender as? UIBarButtonItem //UIBarBUttonItem { //UIBarButtonItem 设置参考点无效 设置来源视图是通过barButtonItem属性 popoverVC?.barButtonItem = item } //model跳转 presentViewController(desVC, animated: true) { () -> Void in } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } 总结popover属性
permittedArrowDirections:设置箭头方向 系统默认为UnKnownsourceView:来源视图(只针对非UIBarButtonItem) 原因:UIBarButtonItem不是UIView的子类barButtonItem:来源视图(只针对UIBarButtonItem)sourceRect:目标参考点(只针对非UIBarButtonItem,UIBarButtonItem设置无效)passthroughViews:设置穿透视图(可以点击该视图交互事件)UIViewController属性
preferredContentSize:设置popover的大小modalInPopover:是否忽略外部点击(默认为false 如果设置为true 表示 点击外部popover不会消失 需要手动添加按钮消失 如果为false 表示点击外部视图 popover会消失)