0
votes

Context: I am creating an IOS application in Objective C with the ArcGIS Runtime SDK. My root view controller is a map. I have the option to create spatial bookmarks and view them in a table view that is pushed over the view. I have a UISearchController on the table view to be able to filter out the bookmarks. If you select a bookmark without searching, you are automatically panned to that location. This is done by popping all view controllers, and loading the root view controller with a flag for the bookmark variable to set as the starting extent.

I would like this same functionality with the searchController table view.

However, I am either unable to dismiss the searchController and the bookmark is zoomed to, or the search controller is dismissed, and the user is brought back to the initial table view.

What I have so far:

In the didSelectRow method on the searchController TableView:

(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

//Accept the spatial envelope and save it to the shared variable to be passed to main view controller
//Now dismiss the searchController and call method to zoom to bookmark
[self.navigationController dismissViewControllerAnimated:NO completion:^{
     //reference to shared instance method
     [[BookmarksTableViewController sharedBookmark] zoomToBookmark];
}];

In BookmarksTableViewController.m

-(void)zoomToBookmark{
    UIViewController *myController = [self.storyboard instantiateViewControllerWithIdentifier:@"viewController"];
    [self.navigationController pushViewController: myController animated:YES];
    //clear the navigation stack
    self.navigationController.viewControllers = [[NSArray alloc] initWithObjects:myController, nil];
}

To me it seems like this should work, but all that happens is the UISearchController is dismissed, then the table view is not dismissed, and I am back where I was before I entered search text.

Any thoughts on a better way to dismiss the UISearchController or how to get back to my root view controller?

1

1 Answers

0
votes

Hope you mean to this answer

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self dismissViewControllerAnimated:NO completion:nil];
}