【问题标题】:Help with navigation Controller, windows & subviews!帮助导航控制器、窗口和子视图!
【发布时间】:2010-07-07 09:20:51
【问题描述】:

我的第一个 xib 在 MainWindow.xib 中包含一个带有类似跳板界面的 ScrollView:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {   
     navController = [[UINavigationController alloc] init];

[navController setNavigationBarHidden:YES]; [窗口 addSubview:navController.view]; [窗口 sendSubviewToBack:navController.view]; }

当一个按钮被点击时,FirstViewController 会出现一个 tableview 和一个导航控制器:

    - (void) buttonPushed:(id)sender {
       FirstViewController *firstViewController = [[FirstViewController alloc] init];
       [navController pushViewController:firstViewController animated:YES];
[firstViewController release];


[window addSubview:navController.view]; }

当我单击导航控制器中的后退按钮返回跳板时,我得到跳板 xib,但对顶部导航栏的触摸没有响应!

- (void)goHome:(id) sender { 
[self.view removeFromSuperview];

如何返回跳板屏幕(mainwindow.xib)而不将导航栏堆叠在顶部,并对触摸做出响应?

【问题讨论】:

    标签: iphone uikit uinavigationcontroller


    【解决方案1】:

    为什么不将跳板视图设置为导航控制器的根视图控制器,并摆脱窗口中的任何 UI?

    我认为窗口不应该有任何 UI 元素接受添加到它的视图控制器的视图(通过导航控制器或标签栏控制器)。

    这样,您无需重新发明轮子即可从跳板视图加载第一个视图,并且后退按钮将正常工作。

    可以在根视图控制器(跳板视图的视图控制器)的viewDidLoad方法中设置navigationBarHidden属性为false。

    【讨论】:

    • 好吧,我已经尝试在 MainWindow.xib 中添加一个 ViewController。 ViewController 下是一个带有 ScrollView 和跳板接口的 View。我使用 [window addSubview:dashboardViewController.view] 将仪表板添加到窗口。我创建了导航控制器:navController = [[UINavigationController alloc] init],将 FirstView 控制器添加到堆栈:navController.viewControllers = [[NSArray arrayWithObject:firstViewController] retain];当我单击跳板中的按钮时,我使用: [window addSubview:navController.view];有没有更好的办法?因为我又在同一个位置。
    • 更好的方法是按照他刚刚向您解释的那样,使用dashboardViewController 作为根视图控制器来初始化UINavigationController。然后,您可以在仪表板控制器出现时将 navController 的隐藏属性设置为 YES,反之亦然。
    【解决方案2】:

    您是否尝试调用 [navController setNavigationBarHidden:YES];在您的主视图视图WillAppear 回调中?

    【讨论】:

    • 好吧,在 ViewDidApper 中不起作用,但是当我单击按钮时,它在 - (void)goHome:(id) sender { 上起作用。关键是,gui 仍然对触摸没有响应。
    【解决方案3】:
    - (void)applicationDidFinishLaunching:(UIApplication *)application
    

    {

    UIViewController *rootController = [[MyRootViewController alloc] init];
    
    navigationController = [[UINavigationController alloc]
    
                                initWithRootViewController:rootController];
    
    [rootController release];
    
    
    
    window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    
    [window addSubview:navigationController.view];
    
    [window makeKeyAndVisible];
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多