Popover代码实现
这一小节我们主要通过代码来实现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:设置箭头方向 系统默认为UnKnown
- sourceView:来源视图(只针对非UIBarButtonItem)
- 原因:UIBarButtonItem不是UIView的子类
- barButtonItem:来源视图(只针对UIBarButtonItem)
- sourceRect:目标参考点(只针对非UIBarButtonItem,UIBarButtonItem设置无效)
- passthroughViews:设置穿透视图(可以点击该视图交互事件)
UIViewController属性
- preferredContentSize:设置popover的大小
- modalInPopover:是否忽略外部点击(默认为false 如果设置为true 表示 点击外部popover不会消失 需要手动添加按钮消失 如果为false 表示点击外部视图 popover会消失)