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 选择颜色
IOS开发系列--TableView多个TableViewCell自定义CellCell上画画(故事板+代码方式),ios7tableview索引