iOS7故事板图像选择器不工作:(

Posted

技术标签:

【中文标题】iOS7故事板图像选择器不工作:(【英文标题】:iOS7 Storyboard image picker not working :( 【发布时间】:2014-02-04 09:14:45 【问题描述】:

我正在尝试使用情节提要在新的 ios7 Xcode 项目中设置imagePicker,但在找到以下代码之前似乎无法在线找到任何示例。

我已对其进行了设置,以便在按下按钮时使用模态推送来导航到具有"UIImagePickerController" 类的视图,该类显然调用了图像选择器代码。

但是,当应用程序运行时,点击允许应用程序访问您的照片后,它不会加载任何内容,请问有什么帮助吗?

抓屏错误: https://pbs.twimg.com/media/Bdy7v9JCAAABpvS.jpg:large

界面设置:

@interface ridecount_AddRide_ViewController : UIViewController<UIImagePickerControllerDelegate, UINavigationControllerDelegate>

代码:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    UIImagePickerController *controller = [segue destinationViewController];
    controller.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    controller.delegate = self;

-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
    [self dismissViewControllerAnimated:YES completion:nil];

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
    [self dismissViewControllerAnimated:YES completion:nil];
    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
    [[self.view viewWithTag:100023] removeFromSuperview];
    UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(320/2-200/2, 10, 100, 100)];
    imageView.tag = 100023;
    imageView.contentMode = UIViewContentModeScaleAspectFit;
    imageView.image = image;
    [self.view addSubview:imageView];

【问题讨论】:

【参考方案1】:

初始化控制器UIImagePickerController *controller = [[segue destinationViewController] init];

【讨论】:

为什么故事板没有初始化视图控制器?这不是奇怪的行为吗?不过谢谢!它有效:) 谢谢,您的 [[segue destinationViewController] init] 方法使我免于使用丑陋的 void segue 解决方法 @AvnerBarr 真实的是情节提要使用initWithCoder: 方法初始化destinationViewController。当UIImagePickerController 使用init 方法以编程方式(不是从情节提要)初始化时,与initWithCoder: 方法相比,它可能会产生一些额外的东西。这就是为什么它不能完全使用情节提要。我不建议在prepareForSegue 正文中再执行一次init... 方法。对象不应被多次初始化。请使用替代解决方案检查我的答案。【参考方案2】:

对于 SWIFT - 有点不同的方法

//Init property
var imagePicker = UIImagePickerController()

然后分配

override func prepareForSegue(segue:UIStoryboardSegue!, sender: AnyObject!)

    imagePicker = segue.destinationViewController as UIImagePickerController
    imagePicker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
    imagePicker.allowsEditing = false
    imagePicker.delegate = self

【讨论】:

【参考方案3】:

我遇到了同样的问题。仅当 availableMediaTypesForSourceType 设置为 UIImagePickerControllerSourceTypeCamera 时,从情节提要初始化的 UIImagePickerController 对象才能正常工作。

如果您想保留 prepareForSegue: 功能,您可以从情节提要中删除 UIImagePickerController 并使用以下代码以编程方式创建它:

- (void)showCameraRollController

    UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
    UIStoryboardSegue *segue = [UIStoryboardSegue segueWithIdentifier:@"CameraRollController" source:self destination:imagePickerController performHandler:^
        [self presentViewController:imagePickerController animated:YES completion:NULL];
    ];
    [self prepareForSegue:segue sender:self];
    [segue perform];


- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

    if ([segue.identifier isEqualToString:@"CameraRollController"]) 
        UIImagePickerController *imagePickerController = [segue destinationViewController];
        imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        imagePickerController.delegate = self;
    

【讨论】:

【参考方案4】:

可能,另一种选择是将 UIImagePickerController 子类化并添加到子类中:

- (instancetype)initWithCoder:(NSCoder *)aDecoder return [super init];

它似乎奏效了。

【讨论】:

以上是关于iOS7故事板图像选择器不工作:(的主要内容,如果未能解决你的问题,请参考以下文章

iOS 7 - 故事板。为啥无法设置 tableViewCell 选择颜色

来自故事板的自定义 UIButton

ios7 - 故事板 - 无法在我的视图控制器中设置导航栏

IOS开发系列--TableView多个TableViewCell自定义CellCell上画画(故事板+代码方式),ios7tableview索引

iOS 启动屏幕故事板与启动图像

修改现有的 4 英寸故事板以在 3.5 英寸屏幕上工作 [重复]