我可以使用此代码在 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)
}
}
但是我无法再次启用屏幕捕获。
有什么办法可以启用和禁用上面的代码吗
仅供参考:用于上述方法的链接
您共享的代码是通过将
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 中禁用屏幕捕获。禁用屏幕捕获的最佳方法取决于您的具体需求。