利用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
的点击事件和滑动事件。