- Set the parent controller as the delegate and setup a new protocol that the child controller implements.
- Use the NSNotificationCenter which uses the Observer Pattern to update another object based upon some action/method.
// Parent UIViewControlller- (void)viewWillAppear:(BOOL)animated { [[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(refreshSearchBarControllerWithDepartmentCode:)
name:@"DepartmentCodeNotification"
object:nil];
[super viewWillAppear:animated];
}
- (void) refreshSearchBarControllerWithDepartmentCode:(NSNotification *)notification { NSString *key;
NSString *trimmedSearchString; for (key in [notification userInfo]) {
trimmedSearchString = [[[notification userInfo] valueForKey:key] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}
self.searchDisplayController.searchBar.text = trimmedSearchString; [self.searchDisplayController.searchBar becomeFirstResponder];
[self.searchDisplayController.searchResultsTableView reloadData];
}- (void)searchBar:(UISearchBar *)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope {
if (selectedScope == DEPARTMENT_SCOPE_TITLE_INDEX && [[self.searchDisplayController.searchBar text] length] <= 2) {
DepartmentsViewController *dvController = [[DepartmentsViewController alloc] initWithNibName:@"DepartmentsView" bundle:[NSBundle mainBundle]]; [self presentModalViewController:dvController animated:YES]; [dvController release];
} else if ([[self.searchDisplayController.searchBar text] length] >= 2) {
NSString *trimmedSearchString = [[self.searchDisplayController.searchBar text] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; [self getEmployees:trimmedSearchString method:[[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:selectedScope]]; [self.searchDisplayController.searchResultsTableView reloadData];
}
} //Child UIViewController
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { NSString *code = [self.tableView cellForRowAtIndexPath:indexPath].detailTextLabel.text;
NSString *description = [self.tableView cellForRowAtIndexPath:indexPath].textLabel.text;
NSDictionary *searchDepartmentCode = [NSDictionary dictionaryWithObjectsAndKeys: code, description, nil]; [[NSNotificationCenter defaultCenter] postNotificationName:@"DepartmentCodeNotification"
object:nil
userInfo:searchDepartmentCode]; [self dismissModalViewControllerAnimated:YES];
} END RESULT:
After a user selects the appropriate department, the child controller is dismissed and the search bar text is updated with appropriate department code.
No comments:
Post a Comment