我想獲得一個子視圖成爲firstResponder。我的理解是,這是在viewDidAppear方法中完成,像這樣:但是如何做一個子視圖firstResponder
- (BOOL)canBecomeFirstResponder {
return YES;
}
,當我插入子視圖在其父視圖的viewDidLoad方法:
同時超控canBecomeFirstResponder返回YES:
- (void)viewDidLoad {
subViewController = [[SubViewController alloc] init];
[self.view insertSubview: subViewController.view atIndex: 0];
[subViewController viewDidAppear: NO];
[super viewDidLoad];
}
(ⅰ調用視圖手動打開,因爲它不會自動觸發),子視圖不會成爲firstResponder。
爲什麼subview不會成爲firstResponder?我怎麼能讓它firstResponder?
感謝,
mbotta
順便說一句,這是我原來的問題的改寫:
我想建立其中RootViewController的對象管理兩個子視圖,一個iPhone應用程序其中之一應該對用戶搖晃他的iphone做出反應。
經過一番挖掘,我總結出子視圖必須在其視圖控制器的viewDidAppear方法中作出firstResponder。此外,canBecomeFirstResponder方法應修改爲返回YES。
所以這裏發生了什麼:我實例化應用程序委託中的rootviewcontroller。在它的viewDidLoad方法中,我告訴它addSubView firstViewController。所有這些都很好用。
但是,firstViewController不會對任何抖動做出反應。我灑了一些NSLogs,發現雖然我們告訴firstBeanController在canBecomeFirstResponder中返回YES,而我們告訴它在viewDidAppear中[self becomeFirstResponder],實際上,它是而不是 firstResponder。
所以,我的問題是: 1)做一個子視圖實際上需要firstResponder才能對抖動做出反應? a)如果沒有,如何讓一個子視圖沒有被firstResponder反應? 2)如何做一個subview firstResponder?
是什麼讓這個有趣的是,如果我執行相同的序列(canBecomeFirstResponder,[self firstResponder],motionBegan :)在一個不同的項目中只有一個視圖控制器,它完美地工作。很明顯,我必須遇到我自己製造的設計缺陷。
感謝,
mbotta
謝謝!我會看看我可以在我的項目中做到這一點。同時,我會重新編輯我的問題,以澄清我能夠得到這個事件,如果firstViewController是唯一的視圖控制器。 – mbotta 2009-11-10 14:55:33