Iphone 帮助我了解如何使用此实现访问UINavigationController
所以我正在构建一个应用程序,我正在运行一些不需要相互了解的ViewController,所以我开始切换视图,就像这样Iphone 帮助我了解如何使用此实现访问UINavigationController,iphone,uinavigationcontroller,Iphone,Uinavigationcontroller,所以我正在构建一个应用程序,我正在运行一些不需要相互了解的ViewController,所以我开始切换视图,就像这样 // remove the previous view in order to load in the new view NSArray *sViews = [self.view subviews]; [sViews makeObjectsPerformSelector:@selector(removeFromSuperview)]; // cr
// 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,或者我是否以正确的方式进行了操作。通常,您希望您的UINavigationController位于根级别,您的应用程序以这种方式设置是否有特定的原因?不过,要回答您的问题,您可以通过为变量设置a来访问该变量,然后使用点表示法:baseVC.navController
对于20像素空间问题,请发布BaseViewController视图相关代码。这可能是一个边界与框架的问题。
UINavigationController
设计用于iPhone上三种可能的环境之一:
UITabBarController
的视图控制器之一presentModalViewController:animated:
显示为全屏视图控制器UINavigationController
已将自身配置为显示为窗口的子视图。这就是为什么您会在顶部看到20像素的间隙。由于窗口对象位于状态栏下方,UINavigationController
会将其导航栏的位置偏移20像素(如果您正在通话,则偏移量会更大)
使用
UINavigationController
作为根视图控制器的标准方法是在application:didfishlaunchingwithoptions:
中将其构造为应用程序委派的属性,并将其视图添加为窗口的子视图。然后,在推到导航堆栈上的任何视图控制器中,可以使用self.navigationController
访问导航控制器对象,这不是在根级别设置导航控制器的主要原因。主要是我有一个钥匙链检查和注册/登录屏幕,我觉得不需要使用导航控制器(不相互传递任何信息,不需要“返回”任何一个,等等)。但当我加载列出业务的mapView和tableView时,用户单击DetailDisclosure按钮,会出现一个更详细的业务页面,通过navController,我可以“返回”到地图和业务列表。我在BaseViewController中创建了导航控制器,{IBOutlet UINavigationController*navController;}(at)属性(非原子,retain)UINavigationController*navController;我也在.m中合成了它,我可以在BaseViewController.m中轻松访问它,但当我在BusinessDisplayViewController.m中时,我会像这样创建一个新变量吗?BaseViewController*baseVC=[BaseViewController alloc];baseVC.navController.navigationBar.barStyle=UIBarStyleBlackTranslucent;因为这在我身上崩溃了。从一开始就使用导航控制器。你可以将其设置为不显示nab栏和任何工具栏,然后在按下时不做动画,基本上也有相同的效果。我认为这将解决你20像素的问题tooSo bas事实上,我需要放弃我的思维方式,只在应用程序的根添加navigationController,而不是试图用它来变得可爱:)而且这个差距不是在我的视图的顶部,实际上是在mapView和tableView之间。嗯,我想这取决于你所说的“变得可爱”是什么意思.请记住,苹果设计的UIViewController
框架用于管理“全屏”视图。如果您试图创建一个只占用部分屏幕的导航控制器,您可能无法在iOS 4中使用它。但是,如果您的导航控制器是全屏的,并且您不希望它是根,您可以始终使用presentModalViewController:animated:
来显示它。