不叫(委托设置为self)的UIImagePickerController委托方法

问题描述:

我有一个问题,即:不叫(委托设置为self)的UIImagePickerController委托方法

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {} 

只能被称为用相机,而不是当我试图通过用户的浏览照片,选择一个图像。

这里是为UIImagePicker代表我的初始化代码:

-(void)viewDidLoad{ 

    [self initImagePicker]; 

} 


-(void)initImagePicker{ 
    DLog(@""); 

    self.imagePickerController.delegate = self; 

} 



- (void)setupImagePicker:(UIImagePickerControllerSourceType)sourceType 
{ 
    self.imagePickerController.sourceType = sourceType; 

    if (sourceType == UIImagePickerControllerSourceTypeCamera) 
    { 
     // user wants to use the camera interface 
     // 
     self.imagePickerController.showsCameraControls = NO; 

     if ([[self.imagePickerController.cameraOverlayView subviews] count] == 0) 
     { 
      // setup our custom overlay view for the camera 
      // 
      // ensure that our custom view's frame fits within the parent frame 
      CGRect overlayViewFrame = self.imagePickerController.cameraOverlayView.frame; 

      CGRect newFrame = CGRectMake(0.0,CGRectGetHeight(overlayViewFrame)-15.0,CGRectGetWidth(overlayViewFrame),15.0); 

      self.view.frame = newFrame; 
      [self.imagePickerController.cameraOverlayView addSubview:self.view]; 
      [self.view bringSubviewToFront:self.view]; 
     } 
    } 
} 

然后在我的根类,一来就是授人以类UIImagePicker是委托给UIImagePicker:

#pragma mark - 
#pragma mark Toolbar Actions 

- (void)showImagePicker:(UIImagePickerControllerSourceType)sourceType 
{ 




    if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) 
    { 
     // camera is not on this device, don't show the camera button 
     NSMutableArray *toolbarItems = [NSMutableArray arrayWithCapacity:self.myToolbar.items.count]; 
     [toolbarItems addObjectsFromArray:self.myToolbar.items]; 
     [toolbarItems removeObjectAtIndex:2]; 
     [self.myToolbar setItems:toolbarItems animated:NO]; 
    } 

    if ([UIImagePickerController isSourceTypeAvailable:sourceType]) 
    { 


     self.overlayViewController = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"OverlayViewController"]; 
     self.overlayViewController.delegate = self; 

     self.overlayViewController.imagePickerController = [[UIImagePickerController alloc] init]; 
     [self.overlayViewController setupImagePicker:sourceType]; 
     [self presentModalViewController:self.overlayViewController.imagePickerController animated:YES]; 
    } 
} 

我知道这是一个SO问题的很多代码,但对于实现这个类的经验丰富的人来说,我做错了什么?

对我来说,这条线是奇怪的:

self.overlayViewController.imagePickerController = [[UIImagePickerController alloc] init]; 

我从来没有分配和初始化前的所有者以外的财产。这是问题吗?

+0

从哪里调用'setupImagePicker'和'showImagePicker' – 2013-02-17 12:05:23

+0

在调用showImagePicker时出现的UIImagePicker委托视图控制器中调用setUpImagePicker。 – stackOverFlew 2013-02-17 12:07:14

找到修复:

需要补充:

self.overlayViewController.imagePickerController.delegate = self.overlayViewController; 

后:

self.overlayViewController.imagePickerController = [[UIImagePickerController alloc] init]; 
+0

*你做了同样的事情@tobiasbayer建议你以前做,但你没有标记他的答案是正确的!伟大的方式来赚取积分! – 2017-01-19 05:11:10

我认为你设置的代表太早(initImagePickerviewDidLoad)。 self.imagePickerController可能没有。 您应该在创建UIImagePickerController之后设置委托。

+0

!!大声笑你可能打败了我。我刚刚发布了我的答案,请接受修改并接受您的回答。 – stackOverFlew 2013-02-17 12:05:01

集UIImagePickerDelegate和UINavigationControllerDelegate中的.h文件中与@interface。

@interface class : UIView <UIImagePickerDelegate , UINavigationControllerDelegate> 

用的UIImagePickerController对象设置自委托过,

imgPickerController.delegate = self; 

希望它可以帮助你。