App退至后台再返回前台后,无法通过Tag定位UITextField的问题求助
App退至后台再返回前台后,无法通过Tag定位UITextField的问题求助
我最近碰到个棘手的问题,想请教下各位大佬:为了阻止用户截图,我初始化了一个SecureTextEntry设为true的UITextField,把它添加到了App的KeyWindow上。同时写了两个方法,用来切换是否允许截图——核心逻辑就是修改这个UITextField的SecureTextEntry属性。
但现在发现,当App退到后台再切回前台之后,我就没办法通过Tag在KeyWindow的Subviews里找到这个UITextField了,它好像从视图层级里消失了!
以下是我的相关代码:
初始化UITextField的代码
var field = new UITextField(); field.SecureTextEntry = true; field.Tag = _fieldViewTag; var mainView = UIApplication.SharedApplication.KeyWindow; mainView.AddSubview(field); field.CenterYAnchor.ConstraintEqualTo(mainView.CenterYAnchor).Active = true; field.CenterXAnchor.ConstraintEqualTo(mainView.CenterXAnchor).Active = true; // 这里做了些图层操作,不确定是不是导致问题的原因 mainView.Layer.SuperLayer?.AddSublayer(field.Layer); field.Layer.Sublayers?.First()?.AddSublayer(mainView.Layer);
切换截图权限的方法
public void AllowScreenShot() { UIView fieldView = null; foreach (var view in UIApplication.SharedApplication.KeyWindow.Subviews) { fieldView = view.ViewWithTag(_fieldViewTag); if (fieldView != null) { break; } } if (fieldView != null) { ((UITextField)fieldView).SecureTextEntry = false; } } public void DisallowScreenShot() { UIView fieldView = null; foreach (var view in UIApplication.SharedApplication.KeyWindow.Subviews) { fieldView = view.ViewWithTag(_fieldViewTag); if (fieldView != null) { break; } } if (fieldView != null) { ((UITextField)fieldView).SecureTextEntry = true; } }
有没有朋友能帮我分析下,为什么后台切前台后这个UITextField会从KeyWindow的Subviews里消失?或者有没有更可靠的实现防截图的方式,能避开这个问题?
备注:内容来源于stack exchange,提问作者Bohdan




