You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

App退至后台再返回前台后,无法通过Tag定位UITextField的问题求助

App退至后台再返回前台后,无法通过Tag定位UITextField的问题求助

我最近碰到个棘手的问题,想请教下各位大佬:为了阻止用户截图,我初始化了一个SecureTextEntry设为trueUITextField,把它添加到了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

火山引擎 最新活动