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

popover是一種非常好的表現(xiàn)形式,讓用戶輸入一些數(shù)據(jù),進行復(fù)雜的選擇,展示復(fù)雜的數(shù)據(jù),用popover,咱們的App可以活得更滋潤,但是在iOS8之前,popover只能在iPad中使用,iOS8之后,終于可以在iPhone中使用popover了,雖然早就有了第三方的支持,不過自己來實現(xiàn)一下豈不是更好? here we go.

1.新建一個single view application,這個不說了.
2.新建一個viewcontroller,取名叫PopViewController,勾選創(chuàng)建Xib,當(dāng)然在SB中關(guān)聯(lián)一個view controller也是OK的,這里我們用Xib吧.

3.讓ViewController (不是PopViewController啊親們)遵循UIPopoverPresentationControllerDelegate協(xié)議,同時實現(xiàn)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,會出現(xiàn)效果如下

雖然效果不好,但是至少已經(jīng)有一個彈出的窗口啦,下面來優(yōu)化之

PopViewController.xib中添加一個segmented control,讓他和屏幕的中心對齊,寬相等,同時設(shè)置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供用戶選擇,我們來實現(xiàn)一下,過程和上面一樣

實現(xiàn)效果圖:

不帶箭頭的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容