【问题标题】:How to make UIView global with button actions如何使用按钮操作使 UIView 全局化
【发布时间】:2014-12-22 12:29:32
【问题描述】:

我在导航控制器中有一个包含 10 个不同视图控制器的应用程序。我有 UIView,我将子视图添加到 sharedApplication 实例的 keyWindow 中。

                 UIWindow *window = [UIApplication sharedApplication].keyWindow;
                 UIView *myView = [UIView alloc]initWithFrame:CGRectMake(0,self.view.frame.size.width - 80,80,90)];

                [window addSubView:myView];


 UIButton *btn1 = [UIButton buttonWithType:UIButtonTypeCustom];

    btn1.frame = CGRectMake(xPos, prevVideoUIView.frame.size.height-
    [btn1 addTarget:self action:@selector(button1Clicked:) forControlEvents:UIControlEventTouchUpInside];
    btn1.hidden = NO;
    [myView addSubview:btn1];

  UIButton *btn2 = [UIButton buttonWithType:UIButtonTypeCustom];

    btn2.frame = CGRectMake(xPos, prevVideoUIView.frame.size.height-
    [btn2 addTarget:self action:@selector(button2Clicked:) forControlEvents:UIControlEventTouchUpInside];
    btn2.hidden = NO;
    [myView addSubview:btn2];

我希望通过应用程序访问 myView,无论我在哪里导航,并且操作用户可以在任何时间点将此视图放在屏幕上。问题是假设用户导航到导航控制器的第三级,并从那里用户在窗口上添加了这个“myView”作为子视图。并返回上一个视图,然后触摸 myView 上的按钮。应用程序崩溃说访问不正确。

请回复本帖。

问候,

段落

【问题讨论】:

  • 创建一个单例类并在其中添加UIView 的对象,在您的任何UIViewController 中实例化UIView。现在使用这个类(单例)在任何你想要的地方使用这个UIView
  • 谢谢你!!我正在寻找这个

标签: ios objective-c


【解决方案1】:

每当您在任何视图控制器中添加所需的视图时,当该视图控制器关闭/弹出时,您的视图也将随该视图控制器一起释放。这就是收到Bad Access Exception的原因。

您可以创建一个UIView 类型的类,并将该类设为Singleton。初始化后,您可以从任何视图控制器中添加或删除视图。通过使用单例模式,您的视图将是全局的和静态的。

您还可以在 AppDelegate 类中创建您的视图,并通过在您的任何视图控制器中获取应用委托对象,您可以添加或删除您的视图。

【讨论】:

    猜你喜欢
    • 2017-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多