Ich habe eine Anwendung, die eine UITableView verwendet, die die Namen der Produkte enthält, diese Produkte sind auch in ihre jeweiligen Abschnitte basierend auf ihren ersten Buchstaben aufgeteilt.Hinzufügen einer Suchleiste zur iPhone-Anwendung, die alphabetische Abschnitte verwendet?
Hier ist mein Code:
- (void)viewDidLoad
{
[super viewDidLoad];
//Initialize alphabet array
m_Alphabet = [[NSArray alloc]initWithObjects:@"A",@"B",@"C",@"D",@"E",@"F",@"G",@"H",@"I",@"J",@"K", @"L",@"M",@"N",@"O",@"P",@"Q",@"R",@"S",@"T",@"U",@"V",@"W",@"X",@"Y",@"Z",@"Other", nil];
//Initialize alphabet distionary of arrays
m_AlphabetDictionary = [[NSMutableArray alloc]init];
//Populate distionary with a mutable array for each character
//in the alphabet (plus one "Other" category)
for (int i = 0; i < 27; i++)
[m_AlphabetDictionary insertObject:[[NSMutableArray alloc] init] atIndex: i];
// The number of products in the database
appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSMutableArray *tempArray = [[NSMutableArray alloc] init];
//For each product in the appDelgates products
for (Product *product in appDelegate.m_Products){
if ([product.category isEqualToString:productType]){
[tempArray addObject:product];
//firstLetter is equal to the first letter of the products name
NSString * l_FirstLetter = [product.name substringToIndex:1];
//convert firstString to uppercase
l_FirstLetter = [l_FirstLetter uppercaseString];
//The added flag ensures objects whose first letter isn't a letter
//are added to array 26
bool added = NO;
for(int i=0; i<[m_Alphabet count]; i++){
//If the first letter of product name is equal to the letter at index i in theAlphabet
if ([l_FirstLetter isEqualToString:[m_Alphabet objectAtIndex:i]]) {
//Add product to section array for that letter
[[m_AlphabetDictionary objectAtIndex:i] addObject:product];
added = YES;
}
}
//If product hasn't been added to array, add it to "Others" category
if(!added)
[[m_AlphabetDictionary objectAtIndex:26] addObject:product];
}
}
//Set navigation controller title
self.title = productType;
}
//Number of sections is equal to the length of the m_Alphabet array
//Letters A-Z plus "Other"
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [m_Alphabet count];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [[m_AlphabetDictionary objectAtIndex:section] count];
}
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
return m_Alphabet;
}
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index
{
return [m_Alphabet indexOfObject:title];
}
- (NSString *)tableView:(UITableView *)aTableView titleForHeaderInSection:(NSInteger)section
{
if ([[m_AlphabetDictionary objectAtIndex:section] count]==0)
return nil;
return [m_Alphabet objectAtIndex:section];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"Cell for row");
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
if([self.productType isEqualToString:@"All"]){
Product *product = (Product *) [appDelegate.m_Products objectAtIndex:indexPath.row];
cell.textLabel.text = product.name;
// Configure the cell.
return cell;
}
else {
//Instead of using appDelegate.products use the new array that will be filled
//by the numberOfReowsInSection method
Product *product = (Product *)[[m_AlphabetDictionary objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
cell.textLabel.text = product.name;
// Configure the cell.
return cell;
}
}
Was ich suche, ist zu tun, um eine Suchleiste oben auf meiner Tabellenansicht hinzufügen, die genau wie die Suchleiste in der „Alle Kontakte“ Abschnitt verhält sich in die iPhone-Kontakte-Anwendung. I.E. Wenn ich suche, verschwinden alle Abschnitte und nur die Suchergebnisse werden angezeigt, bis die Suchleiste wieder leer ist.
Kann mir jemand in die richtige Richtung zeigen?
Danke,
Jack