在SubView上设置Delegate

时间:2012-05-21 20:31:21

标签: iphone ios ipad uiviewcontroller uisplitviewcontroller

我有一个splitViewController,它有一个主视图和详细视图控制器。下面的代码来自master,它会在详细信息中创建新视图:

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

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

detailViewController是DetailViewController的全局实例。在detailViewController中,我有很多textFields,需要使用UITExtFieldDelegate。但是,我认为detailViewController在那时不是自我,这就是我在detailViewController中使用TextFieldDelegate方法时出现EXC_BAD_ACCESS错误的原因。

编辑:我现在发现subView委托方法仅适用于我设置的viewController作为Storyboard中的rootViewCOntroller关系。防爆。如果我在上面的默认菜单设置中有6个视图,那么我在故事板中设置的第一个和根视图中的任何一个都可以正常工作。显示的任何和所有其他子视图(在主视图中进行新选择)将无法正常工作。我认为这有助于诊断问题。

2 个答案:

答案 0 :(得分:1)

我不熟悉故事板,但我没有看到你在任何地方设置detailViewController的委托。在控制子视图之前,您可能需要在某处使用self.detailViewController.delegate = self;之类的内容。

答案 1 :(得分: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 if从堆栈中删除viewControllers来更新我的答案。稍微hacky,但功能。