[ios][swift]在iPhone中使用popover

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供用户选择,我们来实现一下,过程和上面一样

实现效果图:

不带箭头的

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容