2011-05-16 64 views
1

嘿傢伙我有一個UIViewController,RootUIViewController引用另一個UIViewcontroller,MainMenuViewController。sub uiview的UIViewcontroller沒有檢測到觸摸

我將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"); 

} 
+0

你到底在做什麼? – rptwsthi 2011-05-16 12:50:30

+0

這裏的代碼看起來不錯。檢查'm_mainMenuViewController.view'的'userInteractionEnabled'是否設置爲'NO'。 – 2011-05-16 13:02:11

+0

@rptwsthi我的目標是當我觸摸視圖(m_mainMenuViewController.view)時,事件將被捕獲在m_mainMenuViewController touchesBegan方法中。 @Deepak謝謝生病了 – valmo 2011-05-16 13:08:42

回答

2

高興你能夠解決您的內存管理的問題。我想補充一個警告,

[self.view addSubview:m_mainMenuViewController.view];

是有問題的,在我看來,一個壞主意。 UIViewController視圖的子視圖不應該由他們自己的UIViewController管理。這些子視圖可以有控制器,但它們不應該是UIViewController的子類,因爲它們永遠不會像UIViewController所期望的那樣可靠地運行,這可能會在稍後導致頭痛。更好地接受我們從Apple獲得的類和API的限制,並設計一個受支持的,可靠的解決方案。

我試過在這裏詳細講述這個問題:Abusing UIViewControllers,希望這有些幫助。