2

私は 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 について何が欠けていますか?

ありがとう!

4

1 に答える 1