0

マスタービューコントローラーと詳細ビューコントローラーを持つsplitViewControllerがあります。以下のコードはマスターからのものであり、詳細に新しいビューを作成します。

UIViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:[NSString stringWithFormat:@"%@",[self.defaultSettingsMenuItems objectAtIndex:indexPath.row]]];

[self.detailViewController.view addSubview:controller.view];

detailViewControllerは、DetailViewControllerのグローバルインスタンスです。detailViewControllerには、多くのtextFieldがあり、UITExtFieldDelegateを利用する必要があります。ただし、その時点ではdetailViewControllerは自己ではないと思います。そのため、detailViewControllerでTextFieldDelegateメソッドを使用するとEXC_BAD_ACCESSエラーが発生します。

編集:subViewデリゲートメソッドは、ストーリーボード内からrootViewCOntroller関係として設定したviewControllerに対してのみ機能することがわかりました。元。上記のデフォルトのメニュー設定に6つのビューがある場合、ストーリーボードの最初のルートビューとして設定したビューが正しく機能します。表示されている他のすべてのサブビュー(マスタービューでの新しい選択から)は正しく機能しません。これは問題の診断に役立つと思います。

4

2 に答える 2

1

ストーリーボードには詳しくありませんが、detailViewControllerのデリゲートをどこにも設定していません。self.detailViewController.delegate = self;サブビューに制御を渡す前に、おそらくどこかのようなものが必要です。

于 2012-05-21T20:57:58.597 に答える
0

必要なのはこれだけで、2 行目:

UIViewController *viewController= [self.detailViewController.storyboard instantiateViewControllerWithIdentifier:[NSString stringWithFormat:@"%@",[self.defaultSettingsMenuItems objectAtIndex:indexPath.row]]];

if (self.detailViewController.childViewControllers.count >= 1) {
    NSLog(@"childViewControllers: %@",self.detailViewController.childViewControllers);
    [[self.detailViewController.childViewControllers objectAtIndex:0] removeFromParentViewController]; 

}

[self.detailViewController addChildViewController:viewController];

[self.detailViewController.view addSubview:viewController.view];

編集: スタックから viewControllers を削除する if ルックで回答を更新しました。少しハックですが、機能的です。

于 2012-05-22T14:19:47.290 に答える