Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c Can';你不能让UIImagePickerController工作吗?_Objective C_Ios5_Uiimagepickercontroller - Fatal编程技术网

Objective c Can';你不能让UIImagePickerController工作吗?

Objective c Can';你不能让UIImagePickerController工作吗?,objective-c,ios5,uiimagepickercontroller,Objective C,Ios5,Uiimagepickercontroller,除了NSLog之外,什么都不会发生,即使我的视图控制器是UINavigationController和UIImagePickerDelegate的子类。是否有人对UIImagePickerController有任何见解或经验 我应该注意到,我主要使用iPhone进行测试 解决方案:创建一个新类,该类仅包含UINavigationBarDelegate和UIImagePickerDelegate的子类。在该类的ViewDidEmerge中,将代码以模态方式呈现imagePicker。在方法内创建该

除了NSLog之外,什么都不会发生,即使我的视图控制器是UINavigationController和UIImagePickerDelegate的子类。是否有人对UIImagePickerController有任何见解或经验

我应该注意到,我主要使用iPhone进行测试

解决方案:创建一个新类,该类仅包含UINavigationBarDelegate和UIImagePickerDelegate的子类。在该类的ViewDidEmerge中,将代码以模态方式呈现imagePicker。在方法内创建该类的实例(在另一个类内,导入.h文件和所有文件),并以方式呈现该类。

^我收回。模态动画才是真正的问题。尝试为此使用另一个类实例会打乱UIImagePicker的方法实现。

编辑:

如果使用故事板,您应该在代理中定义
prepareFroSegue

-(void) openPhotoLib:(id)sender {
    [self dismissModalViewControllerAnimated:YES];
    UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
    [imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
    [imagePicker setDelegate:self];
    [self presentModalViewController:imagePicker animated:YES];
    NSLog(@"openPhotoLib called");
}
()

我不确定,但我认为电话:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"AddPlayer"])
{
    PlayerDetailsViewController 
      *playerDetailsViewController = 
        (PlayerDetailsViewController *) segue.destinationViewController;

    playerDetailsViewController.delegate = self;
}
}
可能会干扰以下通话

[self dismissModalViewControllerAnimated:YES];
因为两者都是在同一个运行循环中完成的

我建议这样做:

  • 定义一个方法来封装对presentModal的调用

    [self presentModalViewController:imagePicker animated:YES];
    
  • 替换对presentModal的原始调用。。。与:

    - (void)presentPicker:(...)picker {
        [self presentModalViewController:imagePicker animated:YES];
    }
    
  • 说明:通过使用我建议的
    performSelector
    方法,我们只是在运行循环中将对presentPicker的调用排队(实际上没有任何延迟,因为我们指定0.0作为延迟值)。通过这种方式,我们给UIKit一个机会,在尝试呈现下一个模态视图之前,可以忽略模态视图并进行所有必要的清理

    presentPicker
    定义为方法的原因是
    performSelector
    只允许指定一个参数(而不是
    presentModal…
    所需的两个参数)


    希望这能有所帮助。

    问题是因为
    依次调用了dismissModalViewControllerAnimated
    presentModalViewController

    “取消”操作需要一些时间,因为它必须设置要取消的视图的动画。在动画期间,它仍然是顶部模态视图。因此,在此期间不能显示其他模型视图。如果您尝试,那么调用将失败,并且不会执行任何操作

    要修复此问题,请使用
    [self dismissModalViewControllerAnimated:NO]即没有动画

    如果仍然需要动画,请遵循以下解决方案之一:


    创建后不是
    imagePicker
    nil?Sergio,这是一个很棒的主意!然而,不幸的是,它没有起作用(我担心使用模块化segue与ImagePicker不兼容?
     [self performSelector:@selector(presentPicker:) withObject:picker afterDelay:0.0];