【问题标题】:How to use UIImagePickerController with tabBar based application?如何将 UIImagePickerController 与基于 tabBar 的应用程序一起使用?
【发布时间】:2012-10-15 04:56:49
【问题描述】:

我正在制作一个基于 tabBar 和 navigationBar 的应用程序。在其中,当我单击它时,我在视图上有一个按钮,然后在 UIImagePickerControllerSourceTypePhotoLibrary 的帮助下,我打开了图像库,但 imagePicker 默认后退按钮,取消按钮未显示在视图中。就像当我使用 UIImagePickerControllerSourceTypeCamera 时,相机窗口打开但我无法看到捕获图像的单击按钮,因为它会被 tabBar 隐藏。所以请帮我解决这个问题。这是图片的截图。

【问题讨论】:

标签: iphone objective-c ios uitabbarcontroller uiimagepickercontroller


【解决方案1】:

您可以在您的 TabbarController 上显示图像选择器(从您的 AppDelegate 或您实现它的地方获取它)而不是像这样的视图控制器:

  YourAppDelegate* appDel = (YourAppDelegate*)[[UIApplication sharedApplication] delegate];

[appDel.tabBarController presentModalViewController:picker animated:YES];

注意:从 ios 6 开始,presentModalViewController:animated: 已被弃用,取而代之的是 presentViewController:animated:completion:

【讨论】:

  • 我没有通过编码实现tabBar控制器,我在storyBoard中使用过。因此,当我正确 appDelegate_object.taBarController 时,tabBarController 不存在。我正在使用我的 Home 类中的 tabBar,所以我通过 Home_object.TabBarController 进行了尝试,然后它编译但应用程序崩溃。
  • 我不太确定storyBoard,但您可以查看stackoverflow.com/questions/8336997/… 是否有在代码中获取TabBarController 的想法。但我相信从标签栏展示选择器会解决你的问题。
  • 我已经添加了图片的截图,我想在里面隐藏我自己的navBar和tabBar,并且想显示默认的imagePicker navBar和TabBar。
  • 您是否尝试过通过标签栏显示它?另一种选择是从 NavigationController 中呈现选择器,例如 '[self.navigationController presentModalViewController:picker animated:YES]; ' 并检查结果是什么?
  • 您的代码中有 TabBarController 并尝试从 TabBar 呈现选择器吗?
【解决方案2】:

如果项目在情节提要中,您将没有对它的引用(您在代码中创建的)。

而只是爬回视图层次结构并以这种方式抓住选项卡视图控制器。

UITabBarController * tabBarController = (UITabBarController*)self.parentViewController;
[tabBarController presentViewController:picker animated:YES completion:^(void){

}];

但是,如果您在视图中执行此操作,则必须处理解散后重新启动的摄像头。 (制定一些状态以防止这种情况发生或不这样做。)

我知道这是一个老问题,但我认为它会帮助人们度过一段美好的时光,因为这对我有用。

【讨论】:

    【解决方案3】:

    对我来说,这条线解决了这个问题,pickercontroller 出现在标签栏上方

    picker.modalPresentationStyle = .custom;

    【讨论】:

    • 兄弟,你救了我。谢谢
    • 随时兄弟。
    【解决方案4】:
    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
            picker.delegate = self; 
            picker.sourceType = UIImagePickerControllerSourceTypeCamera;
            picker.wantsFullScreenLayout = YES;
    
    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
    
            showImageView.image = [info objectForKey:UIImagePickerControllerOriginalImage];
            }
    

    【讨论】:

    • 我已经添加了图片的截图,我想在里面隐藏我自己的navBar和tabBar,并希望显示默认的imagePicker navBar和TabBar。
    • 请描述一下,我没听懂。
    • @user1652551 在 appdelegate 中声明标签栏??然后通过当前模态视图声明pickerview,并在picker视图中隐藏bottomTabbar它们的图像全屏显示
    【解决方案5】:
        UIImagePickerController *picker = [[UIImagePickerController alloc] init];
        picker.delegate = self; 
        picker.sourceType = UIImagePickerControllerSourceTypeCamera;
        picker.wantsFullScreenLayout = YES;
    
        picker.showsCameraControls = YES;
         picker.navigationBarHidden = NO; 
         picker.toolbarHidden = NO;
        picker.allowsEditing=NO;
    
        [self presentModalViewController:picker animated:YES]; 
    

    【讨论】:

    • 感谢您的回复。但我仍然看不到 imagepicker 默认导航栏和标签栏。
    • @user1652551 也包括这一行 picker.showsCameraControls = YES;选择器.navigationBarHidden = YES; picker.toolbarHidden = YES;
    • 很抱歉我还是看不到。
    • 屏幕顶部和底部显示的内容
    • @user1652551 抱歉,还包括此行 picker.showsCameraControls = YES; picker.navigationBarHidden = 否; picker.toolbarHidden = NO;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多