5

Je rencontre un problème étrange où je suis en train de faire un simple contrôleur de présentation modale. MFMailComposeViewController pour être exact. Cependant, il apparaît derrière le contrôleur de présentation et donc vous ne pouvez pas envoyer d'e-mail ou de type. Vous pouvez voir le bouton "Annuler" sur le UINavigationBar sur le composeur de courrier, mais cela fait apparaître le UIAlertController derrière le contrôleur de présentation. Comment est-ce arrivé? Est-ce un problème iOS 11? Je reçois également un comportement similaire pour UIAlertController s aussi. De plus, si j'appuie sur envoyer et que j'appuie sur le bouton pour faire apparaître un autre compositeur, cela fonctionne normalement. C'est juste le premier.iOS 11 presentViewController en cours de présentation contrôleur

S'il vous plaît voir image ci-jointe J'ai obtenu de Xcode.

enter image description here

MFMailComposeViewController *mailer = [[MFMailComposeViewController alloc] init]; 
mailer.mailComposeDelegate = self; 
mailer.modalPresentationStyle = UIModalPresentationFormSheet; 
[mailer setSubject:@"subject Feedback"]; 
[mailer setToRecipients:@[@"email address"]]; 
[mailer setMessageBody:@"" isHTML:NO]; 
[self presentViewController:mailer animated:YES completion:nil]; 

Edit: Ajout du contrôleur pour plus d'informations.

#import "AboutViewController.h" 
#import <MessageUI/MessageUI.h> 


@interface AboutViewController() <MFMailComposeViewControllerDelegate> 
@property (nonatomic, strong) IBOutlet UIView *contentView; 
@end 

@implementation AboutViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.title = @"About this app"; 
    _contentView.layer.cornerRadius = 10.; 
    _contentView.layer.shadowColor = [UIColor blackColor].CGColor; 
    _contentView.layer.shadowRadius = 3.; 
    _contentView.layer.shadowOpacity = 0.4; 
    _contentView.layer.shadowOffset = CGSizeMake(3., 3.); 
    // Do any additional setup after loading the view from its nib. 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (IBAction)sendFeedbackEmail:(id)sender { 
    if ([MFMailComposeViewController canSendMail]){ 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      MFMailComposeViewController *mailer = [[MFMailComposeViewController alloc] init]; 
      mailer.mailComposeDelegate = self; 
      mailer.modalPresentationStyle = UIModalPresentationFormSheet; 
      [mailer setSubject:@"Feedback"]; 
      [mailer setToRecipients:@[@"[email protected]"]]; 
      [mailer setMessageBody:@"" isHTML:NO]; 
      [self presentViewController:mailer animated:YES completion:nil]; 

     }); 
    } else { 
     NSLog(@"Nope"); 
    } 
} 

- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error 
{ 
    [controller dismissViewControllerAnimated:YES completion:nil]; 
} 

Edit 2:

Je crois avoir trouvé la réponse. J'espère que cela aidera tous ceux qui rencontrent le même problème. Merci pour toutes les réponses, ça m'a aidé à trouver la réponse. Merci @Mert Buran pour l'idée de délégué. Cela m'a montré qu'il avait un délégué de transition différent la première fois et celui que je voulais la deuxième fois.

Le problème était que le contrôleur de navigation poussait le nouveau contrôleur avant de rejeter un contrôleur que j'avais en haut (un contrôleur de menu). Une solution simple, mais parce qu'il n'est pas évident au début et pas de journaux d'erreurs, il était difficile de préciser le point.

+0

Aussi je l'ai mis sur le fil principal pour éviter toute confusion – mashdup

+0

Pouvez-vous télécharger votre projet sur Github? – LinusGeffarth

+0

Malheureusement, je ne peux pas. Mais je vais devoir utiliser une autre solution, merci de regarder – mashdup

Répondre