【问题标题】:Removing titlebar from 'Utility Application's flipside view从“实用程序应用程序翻转侧视图”中删除标题栏
【发布时间】:2009-06-14 14:32:27
【问题描述】:

我在实用程序应用程序模板的反面放置了一张表格。模板会自动放置一个带有完成按钮的标题栏以返回前视图。

When one of the cells in the flipside's table is selected, it brings up the Camera / Image Library picker.但是它留下了标题栏的位置,部分遮挡了选择器界面。

如何在选择器生效时删除标题栏? 谢谢

【问题讨论】:

    标签: ios objective-c iphone cocoa-touch uinavigationbar


    【解决方案1】:
    1. 为 UINavigationBar 添加一个 outlet 到 FlipsideViewController.h。
    2. 打开 FlipsideView.xib 并连接插座。
    3. 显示图像选择器时,将 UINavigationBar 的 hidden 属性设置为 true。
    4. 当图像选择器关闭时,将 hidden 属性设置为 false。

    【讨论】:

    • 谢谢,但 FlipsideView.xib 没有 UINavigationBar。该栏是在 RootViewController.h 中以编程方式创建的,如下所示: UINavigationBar *aNavigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 44.0)]; aNavigationBar.barStyle = UIBarStyleBlackTranslucent; self.flipsideNavigationBar = aNavigationBar; [aNavigationBar 发布];
    • ^ 我的意思是 RootViewController.m
    • 啊,您必须使用较旧的模板(新的实用程序应用程序没有 RootViewController)。好吧,同样的原则也适用——在显示选择器时将 hidden 设置为 true,在隐藏选择器时将其设置为 false。您可能需要一个实例变量来指向 RootViewController。
    • 嗯,不知道如何设置实例变量指向 RootViewController.. 你的意思是把 IBOutlet RootViewController *rootViewController;在 FlipSideView.h 中(和属性,合成它)?如果是这样,我不确定如何链接到实际的 RootViewController?如果我在 OS 3.0 模板中这样做会更容易吗?
    • ^ 应该是'FlipSideViewController.h'
    【解决方案2】:

    我在这里完全绕圈子。显然有一些基本的东西我不明白......

    在我的 RootViewController 中,加载 FlipsideView:

    FlipsideViewController *viewController = [[FlipsideViewController alloc] initWithNibName:@"FlipsideView" bundle:nil];
    self.flipsideViewController = viewController;
    
    [viewController release];
    
    
    // Set up the navigation bar
    UINavigationBar *aNavigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 44.0)];
    aNavigationBar.barStyle = UIBarStyleBlackTranslucent;
    self.flipsideNavigationBar = aNavigationBar;
    [aNavigationBar release];
    
    UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(toggleView)];
    UINavigationItem *navigationItem = [[UINavigationItem alloc] initWithTitle:@"App Title"];
    navigationItem.rightBarButtonItem = buttonItem;
    [flipsideNavigationBar pushNavigationItem:navigationItem animated:NO];
    [navigationItem release];
    [buttonItem release];
    

    同时,在我的 FlipViewController 中,这显示了图像选择器:

    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    
    // THIS IS NOT WORKING
    [self.navigationController.navigationBar setHidden:YES];
    
    [self presentModalViewController:picker animated:YES];
    [picker release];
    

    我已经评论了我认为会删除导航栏的部分。

    【讨论】:

      【解决方案3】:

      在执行 UIViewTransitionAnimationFlipFromLeft(或 UIViewTransitionAnimationFlipFromRight)的动画块内,添加导航栏的移除:

      [flipsideNavigationBar removeFromSuperView];

      【讨论】:

      • UIViewTransitionAnimationFlipFromLeft 没有动画块
      • 或 UIViewTransitionAnimationFlipFromRight。你是如何“颠覆”你的观点的?您必须使用带有 UIViewAnimationTransition 的动画块,这是唯一受支持的方式。
      • 你是对的,它使用 UIViewAnimationTransitionFlipFromLeft。然而,这不是问题。问题是在使用选择器时删除标题栏。翻转在 RootViewController 中。我需要从 FlipsideViewController 中删除标题栏。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-28
      • 2011-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-16
      • 2011-10-24
      相关资源
      最近更新 更多