sub uiview的UIViewcontroller没有检测到触摸

时间:2011-05-16 12:44:57

标签: iphone uiview uiviewcontroller subview

嘿伙计们我有一个UIViewController,RootUIViewController引用另一个UIViewcontroller,MainMenuViewController。

我将MainMenuViewController的视图作为子视图添加到RootUIViewController的视图中。问题是触摸事件没有被MainMenuViewController touchesBegan方法捕获。

相关代码如下。触摸屏幕时的输出显示“触摸根视图控制器”。我想要的结果是要在MainMenuViewController中捕获的触摸事件并显示“触及根视图控制器”。我在这里错过了什么/做错了什么?

RootUIViewController.m

  - (void)viewDidLoad {
    [super viewDidLoad];

    MainMenuViewController* mainMenuViewController = [[MainMenuViewController alloc] initWithNibName:@"MainMenuView" bundle:nil];

    m_mainMenuViewController = mainMenuViewController;
    [self.view addSubview:m_mainMenuViewController.view];
    [mainMenuViewController release];

}

    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
        NSLog(@"touched at root view controller");

    }

MainMenuViewController.m

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    NSLog(@"touched at main view controller");

}

1 个答案:

答案 0 :(得分:2)

很高兴你能够解决你的内存管理问题。我想添加一个警告

[self.view addSubview:m_mainMenuViewController.view];

是有问题的,在我看来,这是一个坏主意。 UIViewController视图的子视图不应由他们自己的UIViewController管理。这些子视图可以有控制器,但它们不应该是UIViewController子类,因为它们永远不会像UIViewController那样可靠的行为,这可能会让你以后感到头疼。最好接受我们从Apple获得的类和API的限制,并设计一个支持的,可靠的解决方案。

我试图在此详细介绍这一点:Abusing UIViewControllers,希望这会有所帮助。