iOS 7 - 无法在选项卡式应用程序上显示UIImagePickerController

时间:2013-12-02 17:32:42

标签: ios objective-c

我正在使用标签式应用程序,该应用程序有5个UITabBarItem。在第二个UITabBarItem我会使用UIImagePickerController显示相册,但结果是一个奇怪的黑白屏幕(我会在底部发布)。

这是我的SecondViewController.h

#import <UIKit/UIKit.h>

@interface SecondViewController : UIImagePickerController  <UIImagePickerControllerDelegate, UINavigationControllerDelegate>

@end

SecondViewController.m

- (void)viewDidLoad
{
    [super viewDidLoad];

    if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {

        UIAlertView *noLibraryAlertView = [[UIAlertView alloc] initWithTitle:@"Error"
                                                                    message:@"No photo library!"
                                                                   delegate:nil
                                                          cancelButtonTitle:@"OK"
                                                          otherButtonTitles: nil];

        [noLibraryAlertView show];
    } else {
        self.delegate = self;
        self.allowsEditing = NO;
        self.navigationBarHidden = NO;
        self.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
    }
}

但是,当我选择第二个UITabBarItem时,该应用会显示以下内容: enter image description here

有什么想法吗?

提前致谢。

3 个答案:

答案 0 :(得分:1)

根据apple's documentation,必须以模态方式呈现UIImagePicker:

  

显示用户界面。在iPhone或iPod touch上,通过调用当前活动视图控制器的presentViewController:animated:completion:方法,以模态方式(全屏)执行此操作,将配置的图像选取控制器作为新视图控制器传递。

因此它不能用于tabbarcontroller或另一个控制器的子节点。

答案 1 :(得分:0)

正式地,你不能继承UIImagePickerController。 但是,假设您使用故事板来实例化SecondViewController,我发现更改这样的代码会起作用:

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super init];
    if (self) {
        self.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
        // other settings
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {

        UIAlertView *noLibraryAlertView = [[UIAlertView alloc] initWithTitle:@"Error"
                                                                     message:@"No photo library!"
                                                                    delegate:nil
                                                           cancelButtonTitle:@"OK"
                                                           otherButtonTitles: nil];

        [noLibraryAlertView show];
    }
}

您的代码无法正常运行,因为您在加载视图后设置了sourceType

答案 2 :(得分:0)

对不起,这是

中的一个愚蠢问题
- (void)viewWillAppear:(BOOL)animated
{
     [super viewWillDisappear:animated];
}

这是一个自动完成错误,但非常感谢所有关于UIImagePickerController的表示和子类化的信息。