Это взято из одного из моих приложений.Как вы говорите, вы не должны создавать подкласс UINavigationController
, вместо этого вы используете их как есть и добавляете viewcontroller в UINavigationController's
.Затем, после установки корневого view-контроллера в каждом UINavigationController
, вы добавляете UINavigationController
к UITabBarController
(фу!).
Таким образом, каждая вкладка будет "указывать" на UINavigationController
, который имеет обычный viewcontroller в качестве корневого viewcontroller, и именно корневой viewcontroller (тот, который вы добавляете) будет отображаться при нажатии вкладки с помощью(необязательно) панель навигации вверху.
UITabBarController *tvc = [[UITabBarController alloc] init];
self.tabBarController = tvc;
[tvc release];
// Instantiates three view-controllers which will be attached to the tabbar.
// Each view-controller is attached as rootviewcontroller in a navigationcontroller.
MainScreenViewController *vc1 = [[MainScreenViewController alloc] init];
PracticalMainViewController *vc2 = [[PracticalMainViewController alloc] init];
ExerciseViewController *vc3 = [[ExerciseViewController alloc] init];
UINavigationController *nvc1 = [[UINavigationController alloc] initWithRootViewController:vc1];
UINavigationController *nvc2 = [[UINavigationController alloc] initWithRootViewController:vc2];
UINavigationController *nvc3 = [[UINavigationController alloc] initWithRootViewController:vc3];
[vc1 release];
[vc2 release];
[vc3 release];
nvc1.navigationBar.barStyle = UIBarStyleBlack;
nvc2.navigationBar.barStyle = UIBarStyleBlack;
nvc3.navigationBar.barStyle = UIBarStyleBlack;
NSArray *controllers = [[NSArray alloc] initWithObjects:nvc1, nvc2, nvc3, nil];
[nvc1 release];
[nvc2 release];
[nvc3 release];
self.tabBarController.viewControllers = controllers;
[controllers release];
Так я перехожу от одного контроллера к другому (это делается путем нажатия на ячейку в табличном представлении, но, как вы видите, метод pushViewController можно использовать везде, где выwant).
(это взято из другой части приложения)
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (self.detailedAnswerViewController == nil) {
TestAnsweredViewController *vc = [[TestAnsweredViewController alloc] init];
self.detailedAnswerViewController = vc;
[vc release];
}
[self.navigationController pushViewController:self.detailedAnswerViewController animated:YES];
}
Свойство self.navigationcontroller
, конечно, устанавливается на каждый viewcontroller, который выдвигается в иерархии UINavigationController.