@locke のソリューションに触発されて、次のようにコードを書き直しました。
1- appdelegate で preViewController と呼ばれる UIViewController を定義して、マスター ビュー コントローラーを保持します。
2-View Controllerで参照するには、次を使用します。
AppDelegate *appdelegate=(AppDelegate *)[[UIApplication sharedApplication] delegate];
3- 次の masterviewcontroller を次のように記述します。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//create a mutable arry to hold the view controllers and copy the current list of navigation controllers
//at this point there is only the current view controller in stack
NSMutableArray *vcs = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];
//create a detailed navigation controller
DetailedViewController *DVC = [[DetailedViewController alloc]initWithNibName:@"DetailedViewController" bundle:nil];
//create a shared variable enviroment to reference a global variable
AppDelegate *appdelegate=(AppDelegate *)[[UIApplication sharedApplication] delegate];
//assign the current viewcontroller to the temporary view controller
appdelegate.preViewController=[self.navigationController.viewControllers lastObject];
//insert detailed view into the array vcs before the current viewcontroller
if (![vcs containsObject:DVC]) {
[vcs insertObject:DVC atIndex:[vcs count]-1];
}
// update the self.navigation with the new stack
[self.navigationController setViewControllers:vcs animated:NO];
// pop the othernavigationcontroller from the navigation stack to fake a detailedview controller push
[self.navigationController popViewControllerAnimated:YES];
}
4 - デフォルトのボタンを置き換えるボタンを追加し、詳細ビュー コントローラの IBaction (backClicked) を定義します。
- (IBAction)backClicked:(id)sender{
AppDelegate *appdelegate=(AppDelegate *)[[UIApplication sharedApplication] delegate];
//push the holder view controller to fake a pop back to the master view controller
[self.navigationController pushViewController:appdelegate.preViewController animated:YES];
}