所以我正在构建一个应用程序,我正在运行一些不需要彼此了解的ViewControllers,所以我开始切换这样的视图......
// remove the previous view in order to load in the new view
NSArray *sViews = [self.view subviews];
[sViews makeObjectsPerformSelector:@selector(removeFromSuperview)];
// create the new view, in this case the user wishes to
BaseViewController *baseVC = [[BaseViewController alloc] initWithNibName:@"BaseViewController" bundle:[NSBundle mainBundle]];
self.baseViewController = baseVC;
[baseVC release];
// add the newly created view to the screen
[self.view insertSubview:baseViewController.view atIndex:0];
以上是我希望导航控制器驻留的视图控制器。因此,在此视图控制器的.m中,我创建了一个UINavigationController作为成员变量并将其命名为navController。然后我尝试使用下面的代码实现UINavigationController。
UIViewController *control = [[BusinessDisplayViewController alloc] initWithNibName:@"BusinessDisplayViewController" bundle: nil];
navController = [[UINavigationController alloc] initWithRootViewController:control];
[self presentModalViewController:navController animated:YES];
我遇到的问题有两个问题。首先,当加载BusinessDisplayViewController(下面)时,我的mapView和tableView之间有一个20像素左右的间隙,当我使用insertSubview:
加载它时,它不存在。不知道为什么会这样。其次,一旦我在BusinessDisplayViewController.m中,我不知道如何访问在BaseViewController中创建的navigationController。有人可以解释为什么我的观点会受影响,我如何访问navigationController,或者我是否正确地采用了这种方式。
答案 0 :(得分:1)
通常,您希望UINavigationController处于根级别,是否有特定原因让您的应用程序以这种方式设置?要回答您的问题,您可以通过为其设置property来访问变量,然后使用点符号:baseVC.navController
。
对于20像素空间问题,请发布与BaseViewController视图相关的代码。这可能是一个边界与框架问题。
答案 1 :(得分:1)
UINavigationController
旨在用于iPhone上三种可能的上下文之一:
UITabBarController
。presentModalViewController:animated:
提供为全屏视图控制器。在您的情况下,UINavigationController
已将自身配置为显示为窗口的子视图。这就是你在顶部看到20像素间隙的原因。由于窗口对象位于状态栏下方,UINavigationController
会将其导航栏的位置偏移20像素(如果您正在通话,则会更多)。
使用UINavigationController
作为根视图控制器的标准方法是将其构建为application:didFinishLaunchingWithOptions:
中应用委托的属性,并将其视图添加为窗口的子视图。然后在您推入导航堆栈的任何视图控制器中,您可以使用self.navigationController
访问导航控制器对象。