Вопрос по objective-c, ios5 – executeSegueWithIdentifier не работает

3

У меня есть этот код, который загружает новый UIView (из раскадровки) при нажатии кнопки. Функция goPressed запускается при нажатии кнопки и вызывает функцию selectImage. selectImage открывает UIImagePickerController и позволяет пользователю выбрать фотографию. После того как пользователь выбрал фотографию, делегат didFinishPickingMediaWithInfo добавляет выбранное изображение в UIImageView.

In 'goPressed', после выполнения selectImage, он должен выполнить Segue в том же виде, что и в комментариях // 1. Но ничего не происходит. executeSegueWithIdentifier, похоже, не работает. И если я не вызываю [self selectImage] перед вызовом executeSegueWithIdentifier, это работает. Вот код:

<code>- (IBAction)goPressed:(id)sender {
    [self selectImage];
    [self performSegueWithIdentifier:@"lastView" sender:currentSender]; //1
}
-(void)selectImage
{
    // Create image picker controller
    UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];

    // Set source to the camera
    imagePicker.sourceType =  UIImagePickerControllerSourceTypePhotoLibrary;

    // Delegate is self
    imagePicker.delegate = (id)self;

    // Allow editing of image ?
    imagePicker.allowsEditing=NO;


    // Show image picker
    [self presentModalViewController:imagePicker animated:YES];


}

- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    // Access the uncropped image from info dictionary
    UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];

    [[picker presentingViewController] dismissModalViewControllerAnimated:YES];


    lePreview.image= image;


}
</code>

Помогите, пожалуйста, почему executeSegueWithIdentifier не работает? Надеюсь, я не пропускаю нужную вам информацию.

Ваш Ответ

1   ответ
13

что вид, который ты пытаешься передать, использует изображение, которое ты получаешь перед тем, как сделать это? Если они отменяют из средства выбора изображений, вы все еще хотите перейти?

Если ему нужна картинка, тогда, может быть, вам следует позвонить своему участнику после того, как вызов делегата «закончил выбор».

Проблема, связанная с отсутствием стрельбы, может быть связана с тем, что анимация все еще происходит здесь:

[[picker presentingViewController] dismissModalViewControllerAnimated:YES];

Можешь попробовать

[[picker presentingViewController] dismissModalViewControllerAnimated:NO];

или, если вы хотите сохранить анимацию, переместите переход к методу «сборщик закончил» и сделайте это следующим образом:

[self dismissModalViewControllerAnimated:YES completion:^() {
[self performSegueWithIdentifier:@"lastView" sender:self];
}];

или, если это не сработает, попробуйте этот подход в методе pickerdidfinish (обратите внимание - это должно быть реализовано как делегат в контроллере, который вызывает модальное представление, а не само модальное представление:

//maintain the animation
[self dismissModalViewControllerAnimated:YES];

//slight pause to let the modal page dismiss and then start the segue
double delayInSeconds = 0.5;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){

    //code to be executed on the main queue after delay

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

});

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

Вы поняли, это работает, когда я устанавливаю dismissModalViewControllerAnimated: NO ... но если я использую ваш код для поддержки анимации, XCode выдает мне эту ошибку: «Сообщение экземпляра UIView для экземпляра не объявляет метод с селектором dismissmodalviewcontrolleranimated: завершение» Umair Khan Jadoon
ok, попробуй новый код. Это обеспечивает небольшой тайм-аут, чтобы анимация могла завершиться между сегментами. CocoaEv
Это ужасно! (не ваше решение, но способ анимации вызывает эту проблему). Похоже, самый простой и чистый способ - просто отключить анимацию. Спасибо, +1:) Jimmy

Похожие вопросы