当前位置: 首页 > 知识库问答 >
问题:

无法禁用UIPwindow上添加的UIView上的用户交互

韦飞尘
2023-03-14

所以问题就在这里。我已经创建了一个自定义加载器,它在中间显示一个基本的“加载”文本,背景变暗。HUD显示良好,但尽管将IsUserInteractionEnabled设置为false,我仍然可以单击添加了HUD的UI。代码如下:

public class Loader {
    public static let shared = Loader()
    
    private(set) var containerView = UIView()
    private(set) var lblText = UILabel()
    
    private init() {
        self.containerView.frame = UIScreen.main.bounds
        self.containerView.backgroundColor = UIColor(red: 0/255, green: 0/255, blue: 0/255, alpha: 0.5)
        self.containerView.isUserInteractionEnabled = false
        
        lblText.font = UIFont.boldSystemFont(ofSize: 30)
        lblText.textAlignment = .center
        lblText.textColor = .white
        lblText.text = "Loading..."
        containerView.addSubview(lblText)
        
        lblText.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint(item: lblText, attribute: NSLayoutConstraint.Attribute.centerX, relatedBy: NSLayoutConstraint.Relation.equal, toItem: containerView, attribute: NSLayoutConstraint.Attribute.centerX, multiplier: 1, constant: 0).isActive = true
        NSLayoutConstraint(item: lblText, attribute: NSLayoutConstraint.Attribute.centerY, relatedBy: NSLayoutConstraint.Relation.equal, toItem: containerView, attribute: NSLayoutConstraint.Attribute.centerY, multiplier: 1, constant: 0).isActive = true
        
        NSLayoutConstraint(item: lblText, attribute: NSLayoutConstraint.Attribute.width, relatedBy: NSLayoutConstraint.Relation.equal, toItem: nil, attribute: NSLayoutConstraint.Attribute.notAnAttribute, multiplier: 1, constant: 275).isActive = true
        lblText.heightAnchor.constraint(equalTo: lblText.widthAnchor, multiplier: 181/375).isActive = true
    }
    
   
    public func show() {
        DispatchQueue.main.async( execute: {
            if let found = UIApplication.key?.subviews.contains(where: {$0 == self.containerView}), found {
                self.containerView.superview?.bringSubviewToFront(self.containerView)
            }
            else {
                UIApplication.key?.addSubview(self.containerView)
            }
        })
    }
    
    @objc public func hide() {
        DispatchQueue.main.async( execute: {
            self.containerView.removeFromSuperview()
        })
    }
}

extension UIApplication {
    static var key: UIWindow? {
        if #available(iOS 13, *) {
            return UIApplication.shared.connectedScenes
                .filter({$0.activationState == .foregroundActive})
                .map({$0 as? UIWindowScene})
                .compactMap({$0})
                .first?.windows
                .filter({$0.isKeyWindow}).first
        } else {
            // do lower version specific window setup
            return UIApplication.shared.keyWindow
        }
    }
}

用法:Loader.Shared.Show()Loader.Shared.Hide()

代码出了什么问题?

共有1个答案

赫连靖琪
2023-03-14
   Maybe when you show the loader you can change the main view isUserInteractionEnabled to false and after you will finish the loading process change it again to true?
    
             DispatchQueue.main.async {
               Loader.shared.show()
               self.isUserInteractionEnabled = false
            }
 类似资料:
  • 问题内容: 根据官方的es文档,禁用交换是Elasticsearch可获得的最佳性能提升之一。 但是,事实证明配置起来很困难。我花了很多时间研究并尝试使用不同的方法来使用Kubernetes上的官方ES docker镜像禁用交换。 设置为环境变量时,映像无法启动,并显示错误:。正如文档所指出的那样,这是意料之中的。我什至用设置挂载了一个自定义,但是失败了。 在k8s上使用官方es映像时,建议的禁用

  • 问题内容: 单击后,我编写了以下代码以禁用网站上的提交按钮: 不幸的是,它没有发送表格。我怎样才能解决这个问题? 编辑 我想绑定提交,而不是表格:) 问题答案: 做到: 发生的事情是您实际上在完全触发该提交事件之前禁用了该按钮。 您可能还应该考虑使用ID或CLASS来命名元素,因此不要在页面上选择所有提交类型的输入。 (请注意,我使用,因此该表单在示例中并未实际提交;请在使用时将其保留。)

  • 问题内容: 我不希望新用户能够注册。因此,在Jenkin的配置中,我使用Jenkin自己的用户数据库禁用了“允许用户注册”。 但是,现在如何手动添加用户?另外,是否有我应该照顾的默认管理员用户? 问题答案: 在“管理詹金斯”中有“创建用户”。

  • 有没有办法添加Firebase 3存储安全规则来限制单个认证用户可以上传多少个文件?例如每个用户100个文件。 或者更新Firebase数据库文件数,一旦有人将文件上传到存储器,然后验证文件数。 试图解决问题,如何处理用户上传无限量数据到存储器的能力。

  • 我使用的是Go Daddy颁发的SSL证书。在我的Linux实例上,以下是软件细节:- Apache版本-Apache/2.4.16(亚马逊) OpenSSL版本-OpenSSL 1.0.1k-FIPS 8 2015年1月8日 mod_ssl版本-mod_ssl-2.4.2 注意:-我从RPM包安装Apache,以后我从RPM包安装mod_ssl和openssl。 1)问题是当我禁用SSLv3并从

  • 我真的很感激你能提供的任何帮助!