动态选择不同的viewControllers

时间:2010-10-31 17:02:01

标签: iphone objective-c uiviewcontroller dynamic-typing

我有一个问题,我认为可能是直截了当但我似乎无法绕过它。

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

我最初只是将所有可能的值硬编码到didSelectRow中。但我真的希望能够动态地动态生成viewController。我找到了几个类似问题的C ++示例,这些示例使我得到了下面的代码。但我似乎无法做到正确,并且我不确定我是否正在寻找一个客观的解决方案。有人有什么想法吗?

这是不起作用的didSelectRow代码:

Class cls = [selectedRow valueForKey:@"viewController"]; 
if (cls!= nil)
{
id myNewController = [[cls alloc] init];    
}


[[self navigationController] pushViewController:myNewController animated:YES];
[myController release];

1 个答案:

答案 0 :(得分:7)

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

如果您存储在字典中的值是NSString,我认为您不能只分配Class cls = someNSString;

但是,你可以这样做:

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

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