在演示文稿正在进行时,尝试在UITabBarController上显示UIImagePickerController

时间:2014-05-27 14:35:33

标签: ios objective-c uitabbarcontroller warnings picker

我需要帮助来解决警告错误。我使用UIImagePickerController,当我点击tabBar上的第三个标签时,它会显示。当我取消时,我想在选择相机之前显示最后一个标签,但是当我解雇我的选择器时,我收到警告!!

这是我的代码,我不明白为什么会收到警告...

-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    [self showPickerController];
}


- (void) showPickerController
{
    imagePicker = [[UIImagePickerController alloc] init];
    if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){
        imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
        imagePicker.delegate = self;
    } else{
        UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Erreur !"
                                                          message:@"Votre iPhone n'a pas de Camera"
                                                         delegate:self
                                                cancelButtonTitle:@"Ok"
                                                otherButtonTitles:nil];
        [message show];
    }
    [self presentViewController:imagePicker animated:NO completion:nil];
}

#pragma mark - Camera Methods

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
    [self.tabBarController dismissViewControllerAnimated:NO completion:^{
        if(self.tabBarController!=nil)
            [self.tabBarController setSelectedIndex:0];
    }];
}

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

简单的想法:将其更改为:

-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    [self showPickerController];
}

可能更好的想法是在开始转换到此vc之前检测源类型可用条件,而是改为呈现选择器vc。

答案 1 :(得分:1)

除了danh的回答之外,在视图控制器中添加BOOL属性,并向viewDidAppear:方法添加一些代码:

@property (nonatomic) BOOL appeared;

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    if (!self.appeared || [self isMovingToParentViewController] || [self isBeingPresented]) {
        self.appeared = YES;
        [self showPickerController];
    }
}

这将使UIImagePickerController在被解雇后不再立即出现。

此外,这与问题并不相关,但您可能希望稍微更改showPickerController方法以防止显示空UIImagePickerController如果没有相机可用:

- (void)showPickerController
{
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
        imagePicker = [[UIImagePickerController alloc] init];
        imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
        imagePicker.delegate = self;
        [self presentViewController:imagePicker animated:NO completion:nil];
    }
    else {
        UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Erreur !"
                                                          message:@"Votre iPhone n'a pas de Camera"
                                                         delegate:self
                                                cancelButtonTitle:@"Ok"
                                                otherButtonTitles:nil];
        [message show];
    }
}