在 iOS 中启用/禁用屏幕捕获

问题描述 投票:0回答:1

我可以使用此代码在 iOS 中禁用屏幕捕获

目标-C

- (void)makeSecure {
    
    dispatch_async(dispatch_get_main_queue(), ^{
        UITextField *field = [[UITextField alloc] init];
        field.secureTextEntry = true;
        [self addSubview:field];
        [[field.centerYAnchor constraintEqualToAnchor:self.centerYAnchor] setActive:YES];
        [[field.centerXAnchor constraintEqualToAnchor:self.centerXAnchor] setActive:YES];
        [self.layer.superlayer addSublayer:field.layer];
        [field.layer.sublayers.firstObject addSublayer:self.layer];
    }); 
}

斯威夫特

func makeSecure() {
    DispatchQueue.main.async {
        let field = UITextField()
        field.isSecureTextEntry = true
        self.addSubview(field)
        field.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
        field.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
        self.layer.superlayer?.addSublayer(field.layer)
        field.layer.sublayers?.first?.addSublayer(self.layer)
    }
}

但是我无法再次启用屏幕捕获。

有什么办法可以启用和禁用上面的代码吗

仅供参考:用于上述方法的链接

ios swift objective-c screen-capture
1个回答
1
投票

您共享的代码是通过将

isSecureTextEntry
属性设置为 true 的 UITextField 添加到视图来禁用屏幕捕获。这将使文本字段显示为安全文本字段,并且用户将无法截取文本字段的屏幕截图。

要再次启用屏幕捕获,您可以从视图中删除 UITextField。您可以通过将以下代码添加到视图控制器来完成此操作:

func disableSecure() {
    DispatchQueue.main.async {
        self.view.subviews.first(where: { $0 is UITextField })?.removeFromSuperview()
    }
}

此代码将找到视图的第一个 UITextField 子视图并将其从视图中删除。

完整代码如下:

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let makeSecureButton = UIButton(frame: CGRect(x: 0, y: 0, width: 200, height: 50))
        makeSecureButton.center = view.center
        makeSecureButton.setTitle("Make Secure", for: .normal)
        makeSecureButton.addTarget(self, action: #selector(makeSecure), for: .touchUpInside)
        view.addSubview(makeSecureButton)

        let disableSecureButton = UIButton(frame: CGRect(x: 0, y: 50, width: 200, height: 50))
        disableSecureButton.center = view.center
        disableSecureButton.setTitle("Disable Secure", for: .normal)
        disableSecureButton.addTarget(self, action: #selector(disableSecure), for: .touchUpInside)
        view.addSubview(disableSecureButton)
    }

    @objc func makeSecure() {
        DispatchQueue.main.async {
            let field = UITextField()
            field.isSecureTextEntry = true
            self.view.addSubview(field)
            field.centerYAnchor.constraint(equalTo: self.view.centerYAnchor).isActive = true
            field.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true
            self.view.layer.superlayer?.addSublayer(field.layer)
            field.layer.sublayers?.first?.addSublayer(self.view.layer)
        }
    }
    
    @objc func disableSecure() {
        DispatchQueue.main.async {
            self.view.subviews.first(where: { $0 is UITextField })?.removeFromSuperview()
        }
    }
}

此代码将创建两个按钮,一个用于确保屏幕安全,一个用于禁用安全性。当用户单击“Make Secure”按钮时,UITextField 将添加到视图中,并且屏幕将被锁定。当用户单击“禁用安全”按钮时,UITextField 将从视图中删除,屏幕将解锁。

请注意,此代码只是一个简单的示例,还有其他方法可以在 iOS 中禁用屏幕捕获。禁用屏幕捕获的最佳方法取决于您的具体需求。

© www.soinside.com 2019 - 2024. All rights reserved.