如果当前视图将UINavigationController作为容器控制器,则模态存在UIImagePickerController不会隐藏UITabBar

时间:2011-06-24 02:06:17

标签: iphone uitabbarcontroller uiimagepickercontroller hidden

我有一个标签栏应用,第二个标签转到导航控制器风格的视图。

在导航栏的rightButton上我有一个相机图标,以模态方式呈现ImagePicker。但它不会成为全屏,而是在标签栏下面。

第一张图片显示我有一个导航控制器容器,这是第一个带有摄像头按钮的rootView。单击它将只创建一个UIImagePickerController并以模态方式呈现它。没什么特别的。

first http://www.jobline.com.sg/images/no_use/1.png

然而,相机的结果是缺少控制来取消/取消图像:

second http://www.jobline.com.sg/images/no_use/2.png

如何隐藏UITabBar并能够看到相机控制?我知道可以这样做,因为Skype配置文件选项卡还有一个摄像头,然后呈现UIActionSheet到“拍照”,然后是全屏摄像头视图。我相信配置文件选项卡也有导航控制器作为其根视图。

万分感谢你的帮助。

以下是我使用的代码:

- (void)takePicture:(id)sender {
  UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];

  if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
    imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
  } else {
    imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
  }

  [self presentModalViewController:imagePicker animated:YES];
}

这是一个相当直接的代码,用于以模态方式呈现imagePicker。所以我想知道为什么没有相机控制,我的tabbar如何重叠它。是因为我的观点层次结构吗?

1 个答案:

答案 0 :(得分:2)

好的,我有一个解决方案,但它有点“hacky”。我的想法是向NSNotificationCenter发布一个通知,该通知调用一个隐藏标签栏的方法。一个例子:

在应用程序委托内(或任何控制你的标签栏......)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(hideTabbar) name:@"hideTab" object:nil];
    // Override point for customization after application launch.
    // Add the tab bar controller's current view as a subview of the window
    self.window.rootViewController = self.tabBarController;
    [self.window makeKeyAndVisible];
    return YES;
}

-(void)hideTabbar{
    [[_tabBarController tabBar] setHidden:YES];
}

然后在出现相机视图时隐藏标签栏,只发布通知,如此

[[NSNotificationCenter defaultCenter] postNotificationName:@"hideTab" object:nil];

当摄像机视线消失时,当然有一个可以取消隐藏它。

希望这有帮助。