iPhone UITableView. How do turn on the single letter alphabetical list like the Music App?

后端 未结 9 927
再見小時候
再見小時候 2020-12-02 04:25

In the iPhone music app, selecting Artist, Songs, or Albums presents a tableView with a verticl list of single letters at the righthand side of the UI that enables rapid scr

9条回答
  •  执念已碎
    2020-12-02 05:18

    A bunch of people asked if it was possible to do this without sections. I wanted the same thing and I found a solution which might be a little shady and doesn't return a value to sectionForSectionIndexTitle but if you are in a corner and don't want to have to make a section for every letter of the alphabet this is a sure fix. Sorry to any code Nazis in advance. :P

    - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
        if (thisTableDataIsShowing)
        {
            NSMutableArray *charactersForSort = [[NSMutableArray alloc] init];
            for (NSDictionary *item in d_itemsInTable)
            {
                if (![charactersForSort containsObject:[[item valueForKey:@"character_field_to_sort_by"] substringToIndex:1]])
                {
                    [charactersForSort addObject:[[item valueForKey:@"character_field_to_sort_by"] substringToIndex:1]];
                }
            }
            return charactersForSort;
        }
        return nil;
    }
    
    - (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {
        BOOL found = NO;
        NSInteger b = 0;
        for (NSDictionary *item in d_itemsInTable)
        {
            if ([[[item valueForKey:@"character_field_to_sort_by"] substringToIndex:1] isEqualToString:title])
                if (!found)
                {
                    [d_yourTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:b inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];
                    found = YES;
                }
            b++;
        }
    }
    

    It works great if you are getting a large amount of data and sectioning it would take a bunch of work. :) Tried to use generic variables so you knew what I was doing. d_itemsInTable is an NSArray of NSDictionaries that I'm listing out to the UITableView.

提交回复
热议问题