0

我正在尝试设置一个 UITableViewController,其中 TableView 中的每个项目都将推送到一个单独的 ViewController。我创建了一个数组

NSArray *cities=@["NewYork", @"Chicago", @"LosAngeles", @"Miami"]; 

并将其实现到我的 UITableViewController 中。然后我推送到一个新的 UIViewController;

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

然而,现在数组/表格视图中的所有项目都推送到“NewYorkViewController”。如何让数组/表格视图中的每个城市推送到他们自己的 ViewController?

我为每个单独的城市创建了一个 UIViewController,例如“ChicagoViewController”等,我不使用故事板。

4

4 回答 4

2

我能想到的唯一方法是使用一个NSDictionary并将您的城市字符串映射到每个UIViewController班级。然后,您只需objectForKey为每个键使用并获取正确的视图控制器。

于 2013-10-01T00:48:45.253 回答
0

首先让我先说最好的选择是拥有城市名称数组,然后在行选择方法中实例化正确的视图控制器。但如果我不能劝阻你,这里有一个更复杂的选择:

不要在数组中存储名称,而是存储字典数组:

NSArray *cities=@[@{@"city":@"NewYork",@"viewController":NewYorkViewController}, @{@"city":@"Chicago",@"viewController":ChicagoViewController}, @{@"city":@"LosAngeles",@"viewController":LosAngelesViewController}, @{@"city":@"Miami",@"viewController":MiamiViewController}];

在您的 tableView:cellForRowAtIndexPath: 中获取城市名称时,如下所示获取城市:

NSString *cityName = [[cities objectAtIndexPath:indexPath.row] objectForName:@"city"];

然后,当您响应选择一行时,获取视图控制器:

UIViewController *cityViewController = [[cities objectAtIndexPath:indexPath.row] objectForName:@"viewController"];
[self.navigationController pushViewController:cityViewController animated:yes];

假设所有城市视图控制器都已实例化,那应该可以工作。

于 2013-10-01T01:24:24.193 回答
0

你为什么这样做?推到一个单独的地方viewController是浪费时间。只需制作一个detailViewController并将数据从一个推送到另一个。在你的代码中,你可以做任何你想做的事情viewController。由于推送的数据,您可以决定tab按下哪个。祝你好运 ;)

于 2013-10-01T00:49:03.740 回答
0

您可以实例化您的四个视图控制器并将它们添加到 NSArray:

NSArray *viewControllers = @[NewYorkViewController, ChicagoViewController, 
                             LosAngelesViewController, MiamiViewController];

然后在 tableView:didSelectRowAtIndexPath: 中可以推送对应的视图控制器:

[self.navigationController pushViewController:viewControllers[indexPath.row] animated:YES];
于 2013-10-01T00:49:08.580 回答