对此词典进行排序的代码是什么:
{
"a) Saudi Arabia" = (
"2012/06/04 Huge Sandstorm",
"2011/03/30 Huge Sandstorm"
);
"b) Niger" = (
"2012/05/27 Huge Sandstorm"
);
"c) ****** QUATRE" = (
"2011/03/30 7Huge Sandstorm over niger",
"2011/03/30 8Huge Sandstorm over niger",
);
}
我的UItableView?
使用此代码我的标题标题部分是有序的,但不是内容:
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
NSArray *allKeys = [[states allKeys] sortedArrayUsingSelector:@selector(compare:)];
return [allKeys objectAtIndex:section];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = (UITableViewCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
NSArray *allKeys = [states allKeys] ;
NSString *curKey = [allKeys objectAtIndex:indexPath.section];
NSArray *curArray = [states objectForKey:curKey];
curValue = [curArray objectAtIndex:indexPath.row];
cell.textLabel.text = curValue;
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
[[cell textLabel] setFont:[UIFont systemFontOfSize:12.0]];
return cell;
}
有人可以帮助我吗?
答案 0 :(得分:1)
//使用此代码
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [[states allKeys] count];//returns the number of key/object pairs
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
NSArray *allKeys = [[states allKeys] sortedArrayUsingSelector:@selector(compare:)];
return [allKeys objectAtIndex:section];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSArray *allKeys = [[states allKeys] sortedArrayUsingSelector:@selector(compare:)];
NSString *curKey = [allKeys objectAtIndex:section];
NSArray *curArray = [states objectForKey:curKey];
return [curArray count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = (UITableViewCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
// Configure the cell...
//---------- CELL BACKGROUND IMAGE -----------------------------
UIImageView *imageView = [[UIImageView alloc] initWithFrame:cell.frame];
UIImage *image = [UIImage imageNamed:@"LightGrey.png"];
imageView.image = image;
cell.backgroundView = imageView;
[[cell textLabel] setBackgroundColor:[UIColor clearColor]];
[[cell detailTextLabel] setBackgroundColor:[UIColor clearColor]];
NSArray *allKeys = [[states allKeys] sortedArrayUsingSelector:@selector(compare:)];
NSString *curKey = [allKeys objectAtIndex:indexPath.section];
NSArray *curArray = [[states objectForKey:curKey] sortedArrayUsingSelector:@selector(compare:)];
NSString *curValue=@"";
if([curArray count]>indexPath.row)
curValue = [curArray objectAtIndex:indexPath.row];
if(curValue)
cell.textLabel.text = curValue;
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
[[cell textLabel] setFont:[UIFont systemFontOfSize:12.0]];
return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 60;
}
可能会帮助你
答案 1 :(得分:0)
您要在titleForHeaderInSection
中对字典进行排序,而不是在cellForRowAtIndexPath
中。
也许你可以在创建整个字典时对其进行排序,以便在UITableView
刷新时不必重新排序。这样,您只需要对其进行一次排序,然后键和值将始终按照正确的顺序填充节标题和单元格。
答案 2 :(得分:0)
这里可能有用。如果您有疑问,请告诉我。在调用tableview之前编写此代码。
NSSortDescriptor *sortDesc = [[NSSortDescriptor alloc] initWithKey:@"birthDate" ascending:YES selector:@selector(compare:)]; //pass the key of your dictionary here
[allKeys sortUsingDescriptors:[NSArray arrayWithObject:sortDesc]];
答案 3 :(得分:0)
您需要对curKey
NSArray *curArray = [states objectForKey:curKey];
//Add this line after currArray
NSArray *sorterCurArray = [curArray sortedArrayUsingSelector:@selector(compare:)];
//Use sorterCurArray instead
curValue = [sorterCurArray objectAtIndex:indexPath.row];
答案 4 :(得分:0)
write the same code in your cellForRowAtIndexPath: too for accessing key
NSArray *allKeys = [[states allKeys] sortedArrayUsingSelector:@selector(compare:)];
答案 5 :(得分:0)
//
// ViewController.m
// StoryboardTutorial
//
// Created by Kurry Tran on 10/20/11.
// Copyright (c) 2011 __MyCompanyName__. All rights reserved.
//
#import "ViewController.h"
#import "DetailViewController.h"
@implementation ViewController
@synthesize states,datasource,curValue,sortedArray,descriptor;
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
#pragma mark - View lifecycle
- (void)viewDidLoad
{
[self setupArray];
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
-(void)setupArray{
NSURL *myUrl=[NSURL URLWithString:@"the link with the dictionary"];
// NSString *str = [NSString stringWithContentsOfURL:myUrl usedEncoding:nil error:nil]; //load above string here
NSMutableDictionary *dict=[NSMutableDictionary dictionaryWithContentsOfURL:myUrl];
// NSString *str =@"# 2012/20110930 Huge Sandstorm over niger# just for the test/20110330 AHuge Sandstorm over niger/20110330 BHuge Sandstorm over niger";
// NSArray * firstArry = [str componentsSeparatedByString:@"#"];
// NSMutableArray *secondArry = [[NSMutableArray alloc] init]; //Will hold the # titles
// NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; //Will hold the strings related to # title
// for(NSString *firstArryStr in firstArry)
// {
// NSArray *tempArry = [firstArryStr componentsSeparatedByString:@"\n"];
// NSMutableArray *titleStingsArry = [[NSMutableArray alloc] init];
// for (int i=0; i< [tempArry count];i++) {
// if (i==0) {
// NSString *title = [tempArry objectAtIndex:i];
// [secondArry addObject:title];
// [dict setValue:titleStingsArry forKey:title];
// } else {
// [titleStingsArry addObject:[tempArry objectAtIndex:i]];
// }
// }
NSLog(@"%@",dict);
// }
// NSString *myString = @"20110330 AHuge Sandstorm over niger/20110330 BHuge Sandstorm over niger/20110330 CHuge Sandstorm over niger/20110330 1Huge Sandstorm over niger/20110330 2Huge Sandstorm over niger/20110330 3Huge Sandstorm over niger/20110330 4Huge Sandstorm over niger/20110330 5CHuge Sandstorm over niger/20110330 6Huge Sandstorm over niger";
// NSArray *event = [myString componentsSeparatedByString:@"/"];
// states = [NSMutableArray arrayWithArray:event];
self.states = [NSMutableDictionary dictionaryWithDictionary: dict];
datasource = [dict allKeys];
self.navigationItem.title = @"test";
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [states count];//returns the number of key/object pairs
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
NSArray *allKeys = [[states allKeys] sortedArrayUsingSelector:@selector(compare:)];
return [allKeys objectAtIndex:section];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSArray *allKeys = [states allKeys];
NSString *curKey = [allKeys objectAtIndex:section];
NSArray *curArray = [states objectForKey:curKey];
return [curArray count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = (UITableViewCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
// Configure the cell...
//---------- CELL BACKGROUND IMAGE -----------------------------
UIImageView *imageView = [[UIImageView alloc] initWithFrame:cell.frame];
UIImage *image = [UIImage imageNamed:@"LightGrey.png"];
imageView.image = image;
cell.backgroundView = imageView;
[[cell textLabel] setBackgroundColor:[UIColor clearColor]];
[[cell detailTextLabel] setBackgroundColor:[UIColor clearColor]];
NSArray *allKeys = [[states allKeys] sortedArrayUsingSelector:@selector(compare:)];
NSString *curKey = [allKeys objectAtIndex:indexPath.section];
NSArray *curArray = [states objectForKey:curKey];
if([curArray count]>indexPath.row) curValue = [curArray objectAtIndex:indexPath.row];
cell.textLabel.text = curValue;
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
[[cell textLabel] setFont:[UIFont systemFontOfSize:12.0]];
return cell;
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
NSArray *allKeys = [states allKeys];
NSString *curKey = [allKeys objectAtIndex:indexPath.section];
NSArray *curArray = [states objectForKey:curKey];
curValue = [curArray objectAtIndex:indexPath.row];
DetailViewController *detail = [self.storyboard instantiateViewControllerWithIdentifier:@"detail"];
// detail.state = [states objectAtIndex:indexPath.row];
detail.state = curValue;
[self.navigationController pushViewController:detail animated:YES];
}
//- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
//{
// //normal cell acquisition code
//
// NSArray *allKeys = [states allKeys];
// NSString *curKey = [allKeys objectAtIndex:indexPath.section];
// NSArray *curArray = [states objectForKey:curKey];
// NSString *curValue = [curArray objectAtIndex:indexPath.row];
// //Do something with the string
//
//}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 60;
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
}
- (void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
@end