美文网首页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