我对我的应用程序做了类似的事情,但我使用的是 NSArray 而不是 NSDictionary,但逻辑是类似的恕我直言。
我用我的对象创建了一个 NSArray,并创建了一个方法来返回它们的计数以及索引处的名称。这样当我想从数组中获取特定对象时,我可以快速访问它。我已更改我的代码以接受 NSDictionary 以便您可以使用。
为了在 UITableView 中创建行数,我创建了一个在调用时返回行数的方法。
-(NSInteger) numberOfCities
{
NSArray * allKeys = [mutableDictionary allKeys];
return [allKeys count];
}
这将在
- (NSInteger) tableView: (UITableView*) tableView numberOfRowsInSection: (NSInteger) section
{
return [self numberOfCities];
}
这样 UITableView 将具有与 NSDictionary 一样的确切行数
为了在特定索引处返回名称,以便您可以在 UITableViewCell 中显示该名称,我创建了此方法
-(NSString*) cityNameAtIndex: (NSInteger) index
{
return NSString* cityName = [[[mutableDictionary objectForIndex:index] allKeys] objectAtIndex:index]; ;
}
这个方法可以在
- (UITableViewCell*) tableView: (UITableView*) tableView cellForRowAtIndexPath: (NSIndexPath*) indexPath
将不同的城市名称分配给表格中的不同单元格。
然后在委托
- (void) tableView: (UITableView*) tableView didSelectRowAtIndexPath: (NSIndexPath*) indexPath
您可以调用此方法并推送到不同的视图控制器
UIViewController* selectedController = nil ;
NSString* nameOfCity = [self cityNameAtIndex: indexPath.row] ;
if( [nameOfCity isEqualToString:@"New York"] )
selectedController = [[NewYorkViewController alloc] init];
else if( [nameOfCity isEqualToString:@"Chicago"] )
selectedController = [[ChicagoViewController alloc] init];
else if( [nameOfCity isEqualToString:@"Miami"] )
selectedController = [[MiamiViewController alloc] init];
else if( [nameOfCity isEqualToString:@"Los Angeles"] )
selectedController = [[LosAngelesViewController alloc] init];
为此,您必须事先创建不同的视图控制器(芝加哥、纽约、洛杉矶、迈阿密),但如果您已经创建了它们并将它们作为对象留在 NSDictionary 中,则可以使用 nameOfCity 来获取NSDictionary 中属于该城市的 viewController 对象,然后将 selectedController 分配给该 viewController。
但是如果你只使用 NSDictionary 来存储城市的名称,我认为 NSArray 会是一个更好的选择。我在 appDelegate 中创建了我的,NSArray 中的名称在我的名为 global.h 的类中是 #define,因为我需要 NSArray 和许多不同视图控制器中的名称,所以如果你也需要它,你可以这样做。
希望这可以帮助!:)