1

我的UIViewControlleriOS 应用程序中有一个显示从NSMutableArray. 此表中的每个单元格都引用了一个唯一的UIViewController,当用户进行选择时调用该单元格。我在“didSelectRowAtIndexPath:”方法中尝试做的是动态创建包含与构建表中的值相匹配的键的UIViewController通过,以及包含相应类名的值需要调用。因为列表相当长,我认为我需要使用 for 循环来执行此操作,但我对如何执行此操作有点困惑。我的样子是这样的:NSMutableDictionaryNSMutableArrayUIViewControllerNSMutableDictionary

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
    [dict setObject:@"aViewController" forKey:@"SelectionA"];
    [dict setObject:@"bViewController" forKey:@"SelectionB"];
    [dict setObject:@"cViewController" forKey:@"SelectionC"];

作为 TableView 基础的 NSMutableArray 如下所示:

NSMutableArray *myArray = [[NSMutableArray alloc] initWithObjects:@"SelectionA", @"SelectionB", @"SelectionC",...,nil];

我将如何获得对单元格内值的引用,然后构造一个 for 循环,该循环将动态创建与用户从 tableView 所做的选择相对应的正确 viewController,然后通过 navigationController 将用户带到该 viewController ?

提前感谢所有回复的人。

4

3 回答 3

2

创建多个 ViewController 不是一个好主意,您应该创建一个 ViewController,并将它们的 tableCell 的值传递给它。换句话说,您可以通过选择单元格来更改 ViewController 的数据模型。但是您将呈现相同的 ViewController。

只有在您的单元格对应不同类型的情况下(例如,一个单元格是道路毛,另一个是文本值),您必须调用不同的 ViewController。

如果你真的需要不同的视图控制器,那么从单元格数据中获取你想要显示的类型

didSelectCellRowAtIndexPath

myAppDelegate *appDelegate = 
    [[UIApplication sharedApplication] delegate];

UIViewController *viewControllerToDisplay;
switch (selection.type) {
  case MapType:  
      viewControllerToDisplay = appDelegate.mapViewController;
  case Picture:
      viewControllerToDisplay = appDelegate.pictureViewController;

}

现在将 viewControllerToDisplay 推送到导航控制器。

于 2012-12-13T18:47:49.947 回答
0

如果您确实需要为每个单元格设置一个视图控制器,则无需使用字典来查找它们。由于选择将通过索引路径进行,因此数组是更好的选择。

创建一个具有两个属性的自定义对象:要在单元格中显示的名称和指向要在选择时推送的视图控制器的指针。myArray使用这些对象而不是字符串加载。填充单元格时,选择与该行匹配的对象并使用其名称。点击单元格时,选择与该行匹配的对象并推动其控制器。

(但是,正如其他人所说,如果您可以使用相同的控制器并且只更改数据,那就是要走的路!)

于 2012-12-13T18:57:16.423 回答
0

这是解决方案,如果您知道类的名称,则将所有类名称存储在数组中,字典具有键 ClassName 和 Xib。我更喜欢 plist 来存储名称,但您也可以使用其他方式。

表或选择器的didselect处放置这样的代码,

Class classobject = NSClassFromString([[ClassArray   objectAtIndex:row]valueForKey:@"ClassName"]);

id object = [[classobject alloc] initWithNibName:[[ClassArray objectAtIndex:row]valueForKey:@"Xib"] bundle:nil];

[self.navigationController pushViewController:object animated:YES];

第一行会将您的字符串转换为类。现在我们有一个好处是 id 可以保存任何对象,所以使用 id 创建对象。最后你有一个自定义类对象,你可以用它做任何你想做的事情,这里只是一个我做导航的演示。

于 2015-06-09T04:08:44.370 回答