SectionsViewController.m
上传用户:jjjjag8
上传日期:2017-04-17
资源大小:1443k
文件大小:5k
源码类别:

iPhone

开发平台:

MultiPlatform

  1. //
  2. //  SectionsAppDelegate.m
  3. //  Sections
  4. //
  5. //  Created by Jeff LaMarche on 7/10/08.
  6. //  Copyright __MyCompanyName__ 2008. All rights reserved.
  7. //
  8. #import "SectionsViewController.h"
  9. #import "NSDictionary-MutableDeepCopyOfArrays.h"
  10. @implementation SectionsViewController
  11. @synthesize table;
  12. @synthesize search;
  13. @synthesize names;
  14. @synthesize keys;
  15. @synthesize allNames;
  16. #pragma mark -
  17. #pragma mark Custom Methods
  18. - (void)resetSearch
  19. {
  20. //self.names = [self.allNames mutableDeepCopyOfArrays];
  21. self.names = [self.allNames mutableDeepCopy];
  22. NSMutableArray *keyArray = [[NSMutableArray alloc] init];
  23. [keyArray addObjectsFromArray:[[self.allNames allKeys] sortedArrayUsingSelector:@selector(compare:)]];
  24. self.keys = keyArray;
  25. [keyArray release];
  26. }
  27. - (void)handleSearchForTerm:(NSString *)searchTerm
  28. {
  29. NSMutableArray *sectionsToRemove = [[NSMutableArray alloc] init];
  30. [self resetSearch];
  31. for (NSString *key in self.keys)
  32. {
  33. NSMutableArray *array = [self.names valueForKey:key];
  34. NSMutableArray *toRemove = [[NSMutableArray alloc] init];
  35. for (NSString *name in array)
  36. {
  37. if ([name rangeOfString:searchTerm options:NSCaseInsensitiveSearch].location == NSNotFound)
  38. [toRemove addObject:name];
  39. }
  40. if ([array count] == [toRemove count])
  41. [sectionsToRemove addObject:key];
  42. [array removeObjectsInArray:toRemove];
  43. [toRemove release];
  44. }
  45. [self.keys removeObjectsInArray:sectionsToRemove];
  46. [sectionsToRemove release];
  47. [table reloadData];
  48. }
  49. #pragma mark -
  50. #pragma mark UIViewController Methods
  51. - (void)viewDidLoad {
  52. NSString *path = [[NSBundle mainBundle] pathForResource:@"sortednames" ofType:@"plist"];
  53. NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:path];
  54. self.allNames = dict;
  55. [dict release];
  56. [self resetSearch];
  57. search.autocapitalizationType = UITextAutocapitalizationTypeNone;
  58. search.autocorrectionType = UITextAutocorrectionTypeNo;
  59. }
  60.  
  61. - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
  62. // Return YES for supported orientations
  63. return (interfaceOrientation == UIInterfaceOrientationPortrait);
  64. }
  65. - (void)didReceiveMemoryWarning {;
  66. [super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview
  67. // Release anything that's not essential, such as cached data
  68. }
  69. - (void)dealloc {
  70. [table release];
  71. [search release];
  72. [allNames release];
  73. [keys release];
  74. [names release];
  75. [super dealloc];
  76. }
  77. #pragma mark -
  78. #pragma mark Table View Data Source Methods
  79. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
  80. {
  81. return ([keys count] > 0) ? [keys count] : 1;
  82. }
  83. - (NSInteger)tableView:(UITableView *)aTableView numberOfRowsInSection:(NSInteger)section
  84. {
  85. if ([keys count] == 0)
  86. return 0;
  87. NSString *key = [keys objectAtIndex:section];
  88. NSArray *nameSection = [names objectForKey:key];
  89. return [nameSection count];
  90. }
  91. - (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  92. {
  93. NSInteger section = [indexPath section];
  94. NSInteger row = [indexPath row];
  95. NSString *key = [keys objectAtIndex:section];
  96. NSArray *nameSection = [names objectForKey:key];
  97. static NSString *sectionsTableIdentifier = @" sectionsTableIdentifier ";
  98. UITableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier: sectionsTableIdentifier];
  99. if (cell == nil) {
  100. cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero 
  101.    reuseIdentifier: sectionsTableIdentifier] autorelease];
  102. }
  103. cell.text = [nameSection objectAtIndex:row];
  104. return cell;
  105. }
  106. - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
  107. {
  108. if ([keys count] == 0)
  109. return @"";
  110. NSString *key = [keys objectAtIndex:section];
  111. return key;
  112. }
  113. - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
  114. {
  115. return keys;
  116. }
  117. #pragma mark -
  118. #pragma mark Table View Delegate Methods
  119. - (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
  120. {
  121. [search resignFirstResponder];
  122. return indexPath;
  123. }
  124. #pragma mark -
  125. #pragma mark Search Bar Delegate Methods
  126. - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
  127. {
  128. NSString *searchTerm = [searchBar text];
  129. [self handleSearchForTerm:searchTerm];
  130. }
  131. - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchTerm
  132. {
  133. int length = [[searchTerm stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] length];
  134. if (length == 0 || searchTerm == nil)
  135. {
  136. [self resetSearch];
  137. [table reloadData];
  138. return;
  139. }
  140. [self handleSearchForTerm:searchTerm];
  141. }
  142. - (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar
  143. {
  144. search.text = @"";
  145. [self resetSearch];
  146. [table reloadData];
  147. [searchBar resignFirstResponder];
  148. }
  149. @end