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 不是 self,这就是为什么在 detailViewController 中使用 TextFieldDelegate 方法时出现 EXC_BAD_ACCESS 错误的原因。

编辑:我现在发现 subView 委托方法仅适用于我在 Storyboard 中设置为 rootViewCONtroller 关系的 viewController。前任。如果我在上面的默认菜单设置中有 6 个视图,那么无论我在情节提要中设置为第一个视图还是根视图,都将正常工作。显示的任何和所有其他子视图(通过在主视图中进行新选择)将无法正常工作。我认为这将有助于诊断问题。

4

2 回答 2

1

我不熟悉情节提要,但我看不到您在detailViewController任何地方设置 ' 代表。self.detailViewController.delegate = self;在将控制权交给子视图之前,您可能需要在某个地方拥有类似的东西。

于 2012-05-21T20:57:58.597 回答
0

这就是我所需要的,第二行:

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];

编辑:我已经用 if 从堆栈中删除 viewControllers 更新了我的答案。有点hacky,但功能齐全。

于 2012-05-22T14:19:47.290 回答