美文网首页ios swift学习笔记简友广场
swift学习笔记--自定义弹出框

swift学习笔记--自定义弹出框

作者: 迷夏湖 | 来源:发表于2020-05-17 21:16 被阅读0次

swift提供了自带的UIAlertController, 可以显示简单的提示框,但有时候想要在弹出框中展示更多的信息,需要自定义弹出框。

自定义的弹出框可以定义一个UIView如Mydialog,背景色可以设置半透明,里面在适当位置定义一个contentView, 背景设置为白色, 这样看上去就是一个弹出框了。ContentView中可以自己定义任何其它的空间,相当于一个新的页面。


image.png

可以给MyDialog设置一个Tap的手势事件,当点击时关闭MyDialog。测试发现当点击contentView部分时也会关闭MyDialog, 解决这个问题的办法是给tap增加一个delegate, 继承UIGestureRecognizerDelegate, 重写gestureRecognizer,在里面判断点击的view是否为父页面。

class MyDialog : UIView,UIGestureRecognizerDelegate{
    
    let tap = UITapGestureRecognizer()
    let contentView = UIView()
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        self.backgroundColor = UIColor.darkGray.withAlphaComponent(0.6)
        tap.addTarget(self, action: #selector(dismiss))
        tap.delegate = self  // 设置tap手势代理,点击子视图不触发该tap事件
        self.addGestureRecognizer(tap)
        showContentView()
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    func showContentView() {
        contentView.frame = CGRect(x: 50, y: 100, width: self.frame.width - 100, height: 300)
        contentView.backgroundColor = UIColor.white
        contentView.layer.cornerRadius = 8
        contentView.clipsToBounds = true
        self.addSubview(contentView)
    }
    
    @objc func dismiss() {
        self.removeFromSuperview()
    }
    // 这里判断点子view不关闭弹出窗口
    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
        if(touch.view == self) {
            return true
        } else {
            return false
        }
    }  
}

相关文章

网友评论

    本文标题:swift学习笔记--自定义弹出框

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