使用UIImagePickerController准备ForSegue

时间:2012-12-04 22:39:46

标签: objective-c ios xcode uiimagepickercontroller

我正在尝试将prepareForSegue用于使用UIImagePickerController从相机胶卷或相机拍摄的图像。这就是我现在所拥有的,我不知道如何完成它,我希望你能帮助我

ViewController.h

    @interface ViewController : UIViewController
<UIImagePickerControllerDelegate, UINavigationControllerDelegate>

-(IBAction)escoger:(id)sender;
-(IBAction)camara:(id)sender;
@property(strong,nonatomic) UIImagePickerController *imagepicker;
@property(strong,nonatomic)IBOutlet UIImageView *image;

Viewcontroller.m

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


    if ([segue.identifier isEqualToString:@"escoger"]) {

        //UIImagePickerController *intro = [UIImagePickerController  ]

        imagepicker = [[UIImagePickerController alloc]init];

        imagepicker.delegate = self;

        imagepicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;


        [self presentViewController:imagepicker animated:YES completion:nil];

}}

3 个答案:

答案 0 :(得分:2)

您无法在prepareForSegue中显示图像选择器。如果您想要实际使用已拍摄的照片,请不要这样做。您需要做的是重新布线,以便当前触发segue的操作会打开图像选择器。然后,在您的选择器代理didFinishPickingMediaWithInfo中,您手动触发segue(performSegueWithIdentifier:sender:

答案 1 :(得分:1)

嗯,如果你将UIImagePickerController与故事板一起使用,这是相对简单的。只需在故事板中创建一个新的viewcontroller并添加一个segue。然后在身份检查器中将viewcontroller类设置为UIImagePickerController。

enter image description here

然后实现prepareForSegue:方法并将源设置为摄像机;

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    UIImagePickerController *controller = [segue destinationViewController];
    controller.sourceType = UIImagePickerControllerSourceTypeCamera;   
}

这就像一个魅力。

答案 2 :(得分:0)

我不建议这样做。从本质上讲,你试图使用segue做其他事情(但不要执行实际的segue)。相反,将您的按钮或其他任何内容连接到IBAction,这会导致图像选择器出现,然后,当实际想要执行segue时,调用

 [self performSegueWithIdentifier:@"escoger" sender:self];

[UPDATE] 回应你的评论。你需要做几件事来完成这项工作:

1)从故事板中删除segue

2)创建另一个segue     从视图控制器拖动,而不是从按钮拖动。这将在两个视图控制器之间创建一个segue,但它不会     附在任何按钮上。

3)为您创建一个IBAction方法     IB中的按钮(a tutorial

4)在该方法中,显示您的图像     选择器

5)从图像选择器返回时,执行segue     在代码中(通过调用performSegueWithIdentifier)。 6)现在,你可以     将图像传递给您的目标视图控制器     prepareForSegue方法。