代码之家  ›  专栏  ›  技术社区  ›  Martin

动态选择不同的视图控制器

  •  0
  • Martin  · 技术社区  · 15 年前

    我有一个问题,我认为可能是直截了当的,但我似乎不能把我的头围绕它。

    我有一个从nsdictionary数组加载的tableview。每个字典都有一个标题(显示在行中)和一个关联的nssstring,表示一个viewcontroller,当选择行时,该viewcontroller应该被推送到堆栈上。换言之,选择行“A”需要初始化“aViewController”实例并将其推送到堆栈上,选择行“B”需要初始化“bViewController”实例并将其推送到堆栈上等。

    我最初只是将所有可能的值硬编码到didSelectRow中。但我真的希望能够动态地生成viewController。我发现了几个类似的问题的C++例子,这些代码引导我进入下面的代码。但我似乎不能把它弄对,也不确定我是否在一个目标c解决方案的正确轨道上。有人有什么想法吗?

    Class cls = [selectedRow valueForKey:@"viewController"]; 
    if (cls!= nil)
    {
    id myNewController = [[cls alloc] init];    
    }
    
    
    [[self navigationController] pushViewController:myNewController animated:YES];
    [myController release];
    
    1 回复  |  直到 15 年前
        1
  •  7
  •   George    15 年前

    您是将实际的类还是类名(作为NSString)存储在字典中?

    但是,您可以:

    NSString *controllerClassName = [selectedRow valueForKey:@"viewController"];
    if (controllerClassName != nil) {
         id myNewController = [[NSClassFromString(controllerClassName) alloc] init];
         [[self navigationController] pushViewController:myNewController animated:YES];
         [myNewController release];
    }
    

    只需将类存储在字典中而不是NSString表示:

    推荐文章