iOS:如何在分组表视图中显示节内容?

时间:2014-04-06 11:24:13

标签: ios uitableview sorting nsarray nsdictionary

我使用以下示例代码将部分内容放在“分组表视图”中。显示“分组表视图”中的内容很好。 但是,问题是,它根据字母顺序对节内容进行排序,因此节标题内容的顺序没有按预期显示。例如:我希望在桌面视图的部分末尾显示“关于”,但在这里它总是首先显示(因为按字母顺序排序)。如何根据以下代码显示部分内容,而无需按字母顺序排序。请指教!

    - (void)viewDidLoad
    {
        [super viewDidLoad];

        NSArray *arrTemp4 = [[NSArray alloc]initWithObjects:@"Quick Logon",@"Stay Logged On", nil];
        NSArray *arrTemp3 = [[NSArray alloc]initWithObjects:@"Notifications",@"Text Messaging",@"Family Members",@"Social Media",nil];
        NSArray *arrTemp2 = [[NSArray alloc]initWithObjects:@"Payment Accounts",nil];
        NSArray *arrTemp1 = [[NSArray alloc]initWithObjects:@"Phone Nickname",@"Version",nil];

        NSDictionary *temp = [[NSDictionary alloc]initWithObjectsAndKeys: arrTemp1,@"About", arrTemp2,@"Payment Preferences", arrTemp3,@"Profile & Preferences", arrTemp4,@"Security ",  nil];

        self.tableContents = temp;

        NSLog(@"table %@",self.tableContents);
        NSLog(@"table with Keys %@",[self.tableContents allKeys]);

self.sortedKeys = [[self.tableContents allKeys] sortedArrayUsingSelector:@selector(compare:)];


        NSLog(@"sorted %@",self.sortedKeys);

    }

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return [self.sortedKeys count];
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    return [self.sortedKeys objectAtIndex:section];
}

- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section {
    NSArray *listData =[self.tableContents objectForKey:[self.sortedKeys objectAtIndex:section]];
    return [listData count];
}


- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier";

    NSArray *listData =[self.tableContents objectForKey:[self.sortedKeys objectAtIndex:[indexPath section]]];

    UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:SimpleTableIdentifier];

    if(cell == nil) {

        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:SimpleTableIdentifier];
        //cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

    }
    cell.accessoryType = indexPath.section > 0 ? UITableViewCellAccessoryDisclosureIndicator : UITableViewCellAccessoryNone;

    NSUInteger row = [indexPath row];
    cell.textLabel.text = [listData objectAtIndex:row];

    NSLog(@"indexPath.section %d",indexPath.section);


    if ( indexPath.section==0 )
    {
       // cell.imageView.image = [UIImage imageNamed:@"icon.png"];
    }
    //cell.switch.hidden = indexPath.section > 0;

    return cell;
}

提前致谢!

1 个答案:

答案 0 :(得分:0)

请勿使用sortedArrayUsingSelector:。而是,按您想要的顺序显式创建键数组。然后,使用该键阵列创建tableContents,并创建另一个阵列以容纳所有内容数组(使用dictionaryWithObjects:forKeys:)。

NSArray *keys = @[ @"About", @"Payment Preferences", @"Profile & Preferences", @"Security" ];
NSArray *values = @[ arrTemp1, arrTemp2, arrTemp3, arrTemp4 ];

self.tableContents = [NSDictionary dictionaryWithObjects:values forKeys:keys];
self.sortedKeys = keys;