dismissModalViewController не работает должным образом - PullRequest
0 голосов
/ 02 июля 2010

У меня проблема в том, что я помогаю кому-то пролить свет. Я уверен, что это что-то очень простое, но я просто не могу этого увидеть и действительно могу использовать дополнительный набор глаз, чтобы помочь найти эту ошибку.

Приложение, над которым я работаю, использует UIImagePickerController для представления предварительного просмотра камеры со скрытым пользовательским интерфейсом стандартной камеры. Этот предварительный просмотр реализует представление cameraOverlay с несколькими кнопками для выполнения моих необходимых задач, одна из которых - отключить предварительный просмотр камеры.

По какой-то причине функция отклонения вида с камеры не будет работать при вызове кнопкой в ​​режиме наложения. Я могу NSLog функцию и вижу, что она на самом деле вызывается кнопкой, но просто не позволяет dismissModalViewController работать. Я протестировал функцию, заставив NSTimer вызывать ее через несколько секунд после загрузки, и она работает нормально, только не тогда, когда я вызываю ее с помощью кнопки в CameraOverlay.

Мой viewController (CameraTestViewController.m) вызывает UIImagePicker, как показано ниже, нажатием кнопки.

-(IBAction) getPhoto:(id) sender {


    OverlayView *overlay = [[OverlayView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGTH)];
    picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.sourceType = UIImagePickerControllerSourceTypeCamera;
    picker.cameraDevice = UIImagePickerControllerCameraDeviceFront;
    picker.cameraOverlayView = overlay;
    picker.showsCameraControls = NO;
    picker.toolbarHidden = YES;
    [self presentModalViewController:picker animated:NO];
    //[self performSelector:@selector(doCancel) withObject:nil afterDelay:10];

}

Я отклонил вид с камеры этим методом в другом месте viewController

-(void)doCancel
{   
    NSLog (@"doCancel method has been called");
    [picker dismissModalViewControllerAnimated:YES];
}

Затем в своем классе OverlayView.m я установил необходимые кнопки и предоставил метод, который вызывает прекращение работы контроллера модального представления.

- (id)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        // Clear the background of the overlay:
        self.opaque = NO;
        self.backgroundColor = [UIColor clearColor];

                  ...

myButton04 = [UIButton buttonWithType:UIButtonTypeCustom];
        myButton04.frame = CGRectMake(10, 447, 44, 13);
        [myButton04 setTitle:@"" forState:UIControlStateNormal];
        [myButton04 addTarget:self action:@selector(scanButton05TouchUpInside) forControlEvents:UIControlEventTouchUpInside];
        [myButton04 setImage:[UIImage imageNamed:@"camControlsBack.png"] forState:UIControlStateNormal];
        [self addSubview:myButton04];

                  ...

    }

    return self;

}


- (void) scanButton05TouchUpInside {

    NSLog(@"BACK BUTTON HAS BEEN PRESSED");
    CameraTestViewController *baseViewController = [[CameraTestViewController alloc] init];
    [baseViewController doCancel];

}

ЛЮБАЯ помощь по этому вопросу была бы очень признательна. Я устал от того, что у меня багровый лоб от удара головой об стену над этим. : Круто:

СПАСИБО!

Ответы [ 2 ]

1 голос
/ 18 октября 2012

Используйте этот код ниже:

[[[self presentingViewController] presentingViewController]  dismissModalViewControllerAnimated:YES];
0 голосов
/ 02 июля 2010

Способ, которым я отклоняю свой modalViewController, заключается в вызове его родителя:

[[picker parentViewController] dismissModalViewControllerAnimated:YES];
...