Я принял решение Apple, которое они используют в примере Metronome .
Я устанавливаю settingsViewController как rootViewController для навигационного контроллера. Затем я отображаю навигационный контроллер, используя:
[self presentModalViewController:navController animated:YES];
В соответствии с примером Apple, я создал интерфейс settingsViewControllerDelegate, который принимает rootViewController. Интерфейс не сложный, просто экземпляр делегата var и метод обратного вызова (settingsViewControllerDidFinish), который должен быть реализован rootViewController. В этом методе вы звоните:
[self dismissModalViewControllerAnimated:YES];
Таким образом, я могу получить пару экранов настроек с помощью навигационного контроллера, и я могу вернуться из контроллера навигации обратно к rootViewController.