• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

iOS : View visible but not active

[复制链接]
菜鸟教程小白 发表于 2022-12-13 01:29:45 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有一个 UIViewController 来初始化一个 UIView。 此 View 包含交互式元素,如 UITextFieldUIButton。 View 被添加到 ViewDidLoad 上,位于方法的底部,以确保当我让它可见时,用户交互可以访问它。

但是当我显示 View 时,无法在此 View 上进行任何交互。

这是唯一可能的吗?我做错了吗?

The View
public class AddBusinessEventView : UIView
{
    public UILabel LblTitle;
    public UITextField TxtType;
    public UIButton BtnClose;

    public AddBusinessEventView(nfloat bw, nfloat bh)
    {


        //Bouton pour fermer le popup
        BtnClose = new UIButton();
        BtnClose.SetImage(UIImage.FromFile("Images/Boutons/lightbox_close.png"), UIControlState.Normal);
        BtnClose.Frame = new CGRect(bw - 80, 30, BtnFermer.ImageView.Image.CGImage.Width * 0.5, BtnFermer.ImageView.Image.CGImage.Height * 0.5);

        //Doit se trouver par dessus txtSite et ajouté après dans la vue pour se trouvé en premier plan

        LblTitle = new UILabel();
        LblTitle.Frame = new CGRect((bw - (lw + 200)) / 2, 100, lw + 200, 30);
        LblTitle.Text = "Fill with your event elements";
        LblTitle.Font = UIFont.FromName("GillSans-Bold", 22);
        LblTitle.TextColor = UIColor.FromRGB(211, 3, 67);
        LblTitle.TextAlignment = UITextAlignment.Center;

        TxtType = new UITextField(new CGRect((bw - 750) / 2, 140, 350, 40));
        TxtType.BackgroundColor = UIColor.White;
        TxtType.TextAlignment = UITextAlignment.Center;
        TxtType.BorderStyle = UITextBorderStyle.RoundedRect;
        TxtType.AutocorrectionType = UITextAutocorrectionType.No;
        TxtType.AutocapitalizationType = UITextAutocapitalizationType.AllCharacters;
        TxtType.Placeholder = "Type";

        AddSubviews(BtnClose, LblTitle, TxtType);
    }
}

UIViewController

partial class EvenementViewController : EnhancedUIViewController
{
    AddBusinessEventView AddBusinessEventView;

    public EvenementViewController(IntPtr handle) : base(handle) { }

    public EvenementViewController() : base() { }

    public override void ViewDidAppear(bool animated)
    {
        base.ViewDidAppear(animated);
        if (myEvent == null)
        {
            ShowAddBusinessEventView();
        }
    }

    public override void ViewDidLoad()
    {
        base.ViewDidLoad();
        nfloat bw = View.Bounds.Width;
        nfloat bh = View.Bounds.Height;
        //Another Elements are adding to view here
        //...

        AddBusinessEventView = new AddBusinessEventView(bw, bh);
        AddBusinessEventView.Hidden = true;

        //Much more View.Add with all elements here
        //...

        View.Add(AddBusinessEventView);
        AddBusinessEventView.BtnType.TouchUpInside += BtnClose_TouchUpInside;
    }

    #region BusinessEventAdd
    void ShowAddBusinessEventView()
    {
        UIView.Animate(duration: 1,
            delay: 0,
            options: UIViewAnimationOptions.CurveEaseInOut,
            animation: () =>
            {
                AddBusinessEventView.Alpha = 1.0f;
            },
            completion: () =>
            {
                AddBusinessEventView.Hidden = false;
                AddBusinessEventListener();
            }

        );
    }

    void HideAddBusinessEventView()
    {
        UIView.Animate(duration: 1,
            delay: 0,
            options: UIViewAnimationOptions.CurveEaseInOut,
            animation: () =>
            {
                AddBusinessEventView.Alpha = 0.0f;
            },
            completion: () =>
            {
                AddBusinessEventView.Hidden = true;
                RemoveBusinessEventListener();
            }

        );
    }

    void BtnClose_TouchUpInside(object sender, EventArgs e)
    {
        System.Diagnostics.Debug.Print("Touching myself");
    }
    #endregion
}

请将 EnhancedViewController 视为标准 UIViewController,我只是添加一些增强功能以​​向用户显示来自 Overlay 的消息。

正如我所说,我们既不能与 TxtType 也不能与 BtnClose 交互。

编辑: 不确定它是否有帮助;但是当 View 添加到 UIViewController 上的 Main View 时,它显示得很好,但是所有用户交互都在这个 查看 即: AddBusinessEventView 充当弹出窗口,因此它覆盖了所有其他元素,当我按下一个元素时,如果在此 View 之前添加另一个元素,它就是这个元素而不是捕获触摸事件的 AddBusinessEventView 元素。

如前所述,主要目的是在不同文件上剪切 View 元素,以提高该应用程序的可读性和可维护性。在此处输入代码



Best Answer-推荐答案


你没有理由不能这样做。 您可以像

那样构建您的代码
  • UIViewController
    • Controller 1
    • Controller 2
    • ...
  • 观看次数
    • 查看1
    • 查看2
    • ...

然后在任意一个Controller中使用View1和View2。

我尝试了您的代码,并且正确弹出了所有内容。 如您所说,如果 View 显示在屏幕上,但它是来自下方与用户交互的另一个 View 的元素,也许您可​​以尝试将您的 View 置于前面。

试试这个

View.BringSubviewToFront(AddBusinessEventView);

在 ViewDidLoad 函数结束时。

关于iOS : View visible but not active,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44065320/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap