我正在使用标签式应用程序,该应用程序有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
时,该应用会显示以下内容:
有什么想法吗?
提前致谢。
答案 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
的表示和子类化的信息。