UIView在'removeFromSuperview'之后没有响应触摸

时间:2010-01-24 05:15:06

标签: iphone

在我的app委托中,我正在创建一个带有一堆视图控制器的选项卡控制器,然后创建一个单独的UIViewController,我将其显示为最顶层的视图,直到用户执行某个操作。

我最初用第二个控制器掩盖我的标签控制器,但最终,第二个控制器通过'removeFromSuperview'被解雇。但是,发生这种情况后,选项卡控制器视图将不响应任何点击或任何UI交互。我的应用程序没有挂起,因为我可以看到处理发生。

有没有办法让标签控制器在最顶层视图被解除后成为事实上的响应者?

以下是我最初创建两个视图控制器的方法:

{
// main navigation controller is a tab bar
UITabBarController *tabBarController = [[UITabBarController alloc] init];
tabBarController.viewControllers = [NSArray arrayWithObjects: controller1, 
                                    controller2,
                                    controller3, nil];

// Add the tab bar to the view
[window addSubview:tabBarController.view];


// Creating the 2nd navigation controller - covering up the tab bar 
// temporarily
UIViewController *viewController  = [[MySecondViewController alloc] 
                                        initWithNibName:@"SomeView" 
                                        bundle:nil];

UINavigationController *navController = [[UINavigationController alloc]
            initWithRootViewController:viewController];

[viewController release];

// Configure and show the second navigation controller
[window addSubview:[navController view]];       

// Make everything visible
[window makeKeyAndVisible];
}

最顶层视图如何被驳回:

@interface MySecondViewController : UIViewController
{
}
-(void)dismissMe;
@end

@implementation MySecondViewController
-(void)dismissMe
{
    // Here, the this view is getting removed
    [self.view removeFromSuperview];        
}
@end

我不希望最顶层的视图看起来像是在添加模式对话框,并且希望在应用程序启动后屏幕就会出现。

1 个答案:

答案 0 :(得分:0)

我认为您的标签栏视图仍然是列表中的“第二个”。您是否尝试过添加:

  

bringSubviewToFront

     

将指定的子视图移动到   兄弟姐妹面前。    - (void)bringSubviewToFront:(UIView *)视图参数视图       子视图移到前面。可用性       *适用于iPhone OS 2.0及更高版本。也可以看看       * - sendSubviewToBack:在UIView.h中声明

如果这没有帮助,您可能需要将标签栏设置为First Responder。

- (BOOL)canBecomeFirstResponder {
     returnYES;
}

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [self becomeFirstResponder];
}