私は BNR の iOS プログラミング本の第 7 章に取り組んでいますが、問題に遭遇しました。この章の冒頭で、前の章でモーション イベントに応答する UIView (HypnosisView) を使用して UIViewController (HypnosisViewController) をセットアップしました。
AppDelegate.m ファイルに UIViewController を作成します。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
...
HypnosisViewController *hvc = [[HypnosisViewController alloc] init];
[[self window] setRootViewController:hvc];
...
}
HypnosisViewController で、HypnosisView をファーストレスポンダーに設定します。
- (void)loadView
{
// Create a view
CGRect frame = [[UIScreen mainScreen] bounds];
HypnosisView *view = [[HypnosisView alloc] initWithFrame:frame];
[self setView:view];
[view becomeFirstResponder];
}
そして、HypnosisView では、canBecomeFirstResponder に必ず YES を返します。残念ながら、HypnosisView は以前のようにモーション イベントに応答しませんでした。最終的に先に進んだとき、興味深い発見をしました。HypnosisViewController を UITabBarController に移動すると、HypnosisView がモーション イベントに応答し始めます。コードは次のようになります。
HypnosisViewController *hvc = [[HypnosisViewController alloc] init];
UITabBarController *tabBarController = [[UITabBarController alloc] init];
NSArray *viewControllers = [NSArray arrayWithObjects:hvc, <insert more objs here>, nil];
[tabBarController setViewControllers:viewControllers];
[[self window] setRootViewController:tabBarController];
HypnosisViewController が RootViewController として設定されている場合、HypnosisView がファーストレスポンダーにならないのはなぜですか? HypnosisViewController が別のコントローラー内に配置されると、なぜ機能し始めたのですか? RootViewController について何が欠けていますか?
ありがとう!