Where you display the top level of the hierarchy (the UITableView), you would want add a UITableView or a the grid view as subviews when requested.
You would add methods to your view controller:
-(void)displayAsGridView {
// hide/remove the table view
// populate the grid view and display
}
-(void)displayAsTableView {
// remove or hide grid view
// make sure the table view exists, if not, create it
[self.tableView reloadData];
}
In the table's data source:
-(UITableViewCell*)tableView:(UITaleView*)tableView cellForRowAtIndexPath:(IndexPath*)indexPath {
// you populate the view cell as you would for any other table
}
You can create both of those either in IB or entirely via code, whichever suits you best. The point is, you would not push either one of those onto the navigation controller just to rearrange how the information is displayed.