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

作者: 芮星晨 | 来源:发表于2016-02-24 17:04 被阅读5940次

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

    实现效果图:

    不带箭头的

    相关文章

      网友评论

        本文标题:[ios][swift]在iPhone中使用popover

        本文链接:https://www.haomeiwen.com/subject/rvrikttx.html