iOS 防截屏方法(一)

利用UITextField的安全输入secureTextEntry来实现防截屏效果,上代码:

objectivec 复制代码
	// 将 textField 添加到父视图
    UITextField *textField = [[UITextField alloc] init];
    textField.backgroundColor = [UIColor whiteColor];
    textField.secureTextEntry = YES;
    [self.view addSubview:textField];
    [textField mas_makeConstraints:^(MASConstraintMaker *make) {
        make.edges.equalTo(self.view);
    }];
objectivec 复制代码
	// 需要防截屏内容视图,在这个视图中绘制想要防截屏的UI
	UIView *subView = [[UIView alloc] init];
	
    // 将想要隐藏的内容添加到UITextField的子视图上
    UIView *firstView = textField.subviews.firstObject;
    // 注意:这一步设置非常关键,如果没有这个设置会导致页面事件被UITextField拦截!!!
    firstView.userInteractionEnabled = YES;
    // 将 subView 添加到 firstView
    [firstView addSubview:subView];

上面提到最主要的一点 firstView.userInteractionEnabled = YES;,我们知道UITextField是属于输入框,被点击时会弹起键盘,我们当然可以通过UITextFieldDelegate代理不让键盘弹起,但是键盘不弹起的同时,子视图的事件也被拦截,导致想在防截屏的区域处理事件就做不到了。

通过断点打印查看 firstView 的信息可以发现其 userInteractionEnabled 属性处于 NO 状态 ,我们只要将其设置成YES,就可以让 firstView 可以接收处理事件,不会影响subView的点击事件和滑动事件。

相关推荐
UnicornDev2 小时前
从零开始学iOS开发(第四十四篇):App Store 提交与审核 —— 让应用走向世界
macos·objective-c·cocoa
MonkeyKing3 小时前
iOS dyld加载流程与App启动原理(pre-main阶段)详解
ios
MonkeyKing3 小时前
iOS类加载全解析:map_images、load_images、initialize调用时机
ios
美狐美颜SDK开放平台4 小时前
什么是美颜SDK?高并发场景下的企业级美颜SDK如何开发?
android·人工智能·ios·美颜sdk·第三方美颜sdk·视频美颜sdk
90后的晨仔4 小时前
SwiftUI 数据持久化完全指南:从偏好设置到企业级存储
ios·axios
90后的晨仔5 小时前
SwiftUI 高级特性第3章:环境与偏好设置
ios
晴天无痕5 小时前
intel过来的xcode项目在M芯片电脑无法显示模拟器的问题日
ide·macos·xcode
Digitally6 小时前
如何连接安卓手机到 Mac?2026 年 7 种可靠方法
android·macos·智能手机
Digitally6 小时前
如何将短信从 iPhone 传输到 Mac?
macos·ios·iphone
timebeign6 小时前
Claude安装流程,系统macOS m1
macos