【问题标题】:Click through UIWindows点击通过 UIWindows
【发布时间】:2012-12-26 13:44:14
【问题描述】:

我一直在关注这个example,以便在statusBar 之上创建一个UIWindow

我的UIWindow 显示在statusBar 之上,一切正常,但应用程序的实际视图(带有按钮的视图)没有响应我的操作:

我正在使用 Storyboards 和 iOS6。 这是我创建 statusBar 叠加层的代码:

- (void)viewDidAppear:(BOOL)animated     {

    UIWindow *overlayWindow = [[ACStatusBarOverlayWindow alloc] initWithFrame:CGRectZero];
    AppDelegate *app = [[UIApplication sharedApplication] delegate];

    overlayWindow.rootViewController = app.window.rootViewController;
    app.window  = overlayWindow;
    [overlayWindow makeKeyAndVisible];

}

statusBar 下的视图没有响应,我无法点击UIButton。是否有可能以某种方式使带有我的应用程序界面的 UIWindow 接受忽略ACStatusBarOverlayWindow 的触摸?怎么办?

【问题讨论】:

    标签: iphone objective-c ios cocoa-touch uiview


    【解决方案1】:

    通常,如果一个按钮对触摸没有响应,那是因为该按钮超出了其父 UIView 的范围。

    您的代码似乎不是解决您要解决的问题的合适方法。如果你只需要你的窗口有一个状态栏,或者你只需​​要在当前视图中添加一个按钮,那么你这样做的方式可能是不正确的。

    就我个人而言,我从未见过有人在 viewDidAppear 中实例化 UIWindow,因为该应用程序带有它自己的 UIWindow。您应该使用 UIView 并向其添加叠加层。

    附带说明,如果您要按照您尝试的方式进行操作,那么您的窗口至少需要一个框架。所以 initWithFrame:CGRectZero 将是 initWithFrame:CGRectMake(0,0,320,480) 或类似的东西。

    解决该问题的更好方法是实例化 UIViewController 并将其设置为您的 rootViewController。或者只是将您的按钮添加到当前 viewController 的视图中。

    - (void)viewDidLoad     {
    
        UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        [button addTarget:self 
                   action:@selector(myMethod:)
         forControlEvents:UIControlEventTouchUpInside];
        [button setTitle:@"Tap Me" forState:UIControlStateNormal];
        [button sizeToFit];
        [self.view addSubview:button];
    }
    

    【讨论】:

    • 是的,先生!我的 ViewDidLoad 方法中有完全相同的代码!我认为您误解了我的问题,我正在创建一个 UIWindow 以便能够在状态栏顶部创建一个视图。顺便说一句,我如何将我的 ViewController 实例化为 rootViewController?
    • 对不起,我已经想通了。感谢您的帮助!
    猜你喜欢
    • 2021-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-04
    • 2017-07-08
    相关资源
    最近更新 更多