【问题标题】:Set the Delegate on SubView在 SubView 上设置委托
【发布时间】:2012-05-21 20:31:21
【问题描述】:

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

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 个视图,那么无论我在情节提要中设置为第一个视图还是根视图,都将正常工作。显示的任何和所有其他子视图(通过在主视图中进行新选择)将无法正常工作。我认为这将有助于诊断问题。

【问题讨论】:

    标签: iphone ios ipad uiviewcontroller uisplitviewcontroller


    【解决方案1】:

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

    【讨论】:

    • 当我 NSLog 来自 subView 的委托时,我得到 detailViewController
    • 那我不完全明白你的问题是什么=\
    • 坦率地说,我也不认为我会这样做。我不明白为什么如果委托设置正确,子视图会从简单的 UITextField 委托中崩溃。
    • 找出中断的代码行(带有断点),然后开始单步执行,直到找到返回错误数据的系统函数?这很烦人,但它确实有效。通常。
    • 那么我已经超出了我的范围。故事板对我来说是黑魔法。我可能会想出一些东西,但不是不学习整个概念——我没有时间。不过祝你好运。
    【解决方案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];
    

    编辑:我已经用 if 从堆栈中删除 viewControllers 的方式更新了我的答案。有点hacky,但很实用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-29
      相关资源
      最近更新 更多