简体   繁体   English

iOS7故事板图像选择器无法正常工作:(

[英]iOS7 Storyboard image picker not working :(

Im trying to set up an imagePicker in a new iOS7 Xcode project using storyboards but can't seem to find any examples online until I found the following code. 我试图使用故事板在新的iOS7 Xcode项目中设置imagePicker ,但在找到以下代码之前似乎无法在线找到任何示例。

I've set it up so that when a button is pressed it uses a modal push thing to navigate to the view which has the class of "UIImagePickerController" which apparently calls in the image picker code. 我已经设置好了,当按下按钮时,它会使用模态推送来导航到具有"UIImagePickerController"类的视图,该类显然调用图像选取器代码。

However when the app is run it won't load anything up after clicking on allow the application to access your photos any chance of some help please? 但是,当应用程序运行时,点击后允许应用程序访问您的照片,任何获得一些帮助的机会都不会加载任何内容吗?

Error screen shot grab: https://pbs.twimg.com/media/Bdy7v9JCAAABpvS.jpg:large 错误屏幕截图抓取: https ://pbs.twimg.com/media/Bdy7v9JCAAABpvS.jpg : large

interface setup: 界面设置:

@interface ridecount_AddRide_ViewController : UIViewController<UIImagePickerControllerDelegate, UINavigationControllerDelegate>{

code: 码:

-(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];
}

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

for SWIFT - bit different approach 对于SWIFT - 有点不同的方法

//Init property
var imagePicker = UIImagePickerController()

then assign 然后分配

override func prepareForSegue(segue:UIStoryboardSegue!, sender: AnyObject!)
{
    imagePicker = segue.destinationViewController as UIImagePickerController
    imagePicker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
    imagePicker.allowsEditing = false
    imagePicker.delegate = self
}

I had the same problem. 我有同样的问题。 The UIImagePickerController object which was initialized from the storyboard worked correctly only when the availableMediaTypesForSourceType was set to UIImagePickerControllerSourceTypeCamera . 仅当availableMediaTypesForSourceType设置为UIImagePickerControllerSourceTypeCamera时,从故事板初始化的UIImagePickerController对象才能正常工作。

If you want to preserve prepareForSegue: functionality you can remove the UIImagePickerController from the storyboard and create it programatically using the following code: 如果要保留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;
    }
}

Possibly, another alternative is to subclass UIImagePickerController and add to the subclass: 可能另一种方法是将UIImagePickerController子类化并添加到子类:

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

It seemed to work. 它似乎工作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM