点击进入UIWindows(Click through UIWindows)

2019-10-17 12:21发布

我一直在关注这个例子中的一切创建UIWindow在顶部statusBar

UIWindow被显示在顶部statusBar所有的罚款,但应用程序(带有按钮)的实际视图不会对我的行动作出回应:

我用故事板和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 ? 那怎么可以呢?

Answer 1:

通常,如果一个按钮没有对触摸做出反应,那是因为按键是它的范围之外的父母UIView的。

您的代码似乎并没有得到相应的方法,你正在试图解决这个问题。 如果你只需要你的窗口有一个状态栏,或者你只需​​要一个按钮添加到您当前视图,你这样做的方式可能不正确。

个人而言,我从来没有见过任何实例化一个UIWindow在viewDidAppear,因为应用程序具有它自己的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];
}


文章来源: Click through UIWindows