Вообще говоря, контроллер навигации поддерживает стек контроллеров представления, на которые вы нажимаете и извлекаете. Если вы используете IB при перетаскивании контроллера навигации из библиотеки в окно приложения, он фактически добавит ряд объектов, включая UIViewController, который будет действовать как контроллер корневого представления. Измените класс этого корневого контроллера представления на класс вашего первого контроллера представления.
Вы можете создать дополнительные контроллеры представлений (я бы поместил эти другие контроллеры представлений в отдельные файлы NIB), которые вы затем помещаете в стек контроллеров представлений, когда хотите сделать их видимыми. Вам не нужно связывать их с контроллером навигации в IB.
Так, например, чтобы поместить новый контроллер представления в стек, у вас будет какой-то код, похожий на этот (контроллер представления загружается из DetailView.xib:
DetailViewController *viewController = [[DetailViewController alloc]
initWithNibName:@"DetailView" bundle:nil];
viewController.someAttribute = someValue;
[[self navigationController] pushViewController:viewController animated:YES];
[viewController release];
Если вы используете UITableViewControllers, вы можете поместить этот код в метод didSelectRowAtIndexPath: indexPath, чтобы новый контроллер представления появлялся, когда пользователь выбирает строку в таблице.
Контроллер навигации позаботится о срабатывании контроллера верхнего вида, когда пользователь нажмет кнопку «Назад», или вы можете открыть его самостоятельно, вызвав popViewControllerAnimated:
[[self navigationController] popViewControllerAnimated:YES]