0

Ce problème est quelque chose qui m'a bloqué, donc j'espère que quelqu'un peut vous aider. J'ai une UIActionSheet sur une vue qui a trois options. Une qui amène mon utilisateur à une nouvelle vue, une à partager par email et une à partager via SMS.UIActionSheet pour ouvrir Mail Application iPhone

J'ai la UIActionSheet créée qui fonctionne sans problème, la nouvelle partie de vue de la AlertSheet fonctionne également. J'ai importé le framework Message.UI et mis en place les sélecteurs de courrier et de SMS et les compositeurs qui vont bien. Cependant, j'ai du mal à régler les deux «boutons» sur la feuille UIAction pour ouvrir le courrier et les SMS.

Normalement, je le ferais via le constructeur d'interface et connecter un UIButton aux actions que j'ai créées, mais comme il s'agit d'une UIActionSheet, cela ne peut pas être fait de cette façon. Désolé pour le code LONG mais je sentais que j'avais besoin de tout montrer, alors s'il vous plaît voir ci-dessous;

-(IBAction)showActionSheet { 
    UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Choose an Option" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Application Support",@"Share Via Email",@"Share Via SMS",nil]; 
    [actionSheet showInView:self.view]; 
    [actionSheet release]; 
} 
-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { 
    if(buttonIndex == 0) { 
    AppSupportView *controller = [[AppSupportView alloc] initWithNibName:@"AppSupportView" bundle:nil]; 
    controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
    [self presentModalViewController:controller animated:YES]; 
    [controller release]; 
    } 

    if(buttonIndex == 1) { 

    } 

    if(buttonIndex == 2) { 

    } 

} 

- (void)dealloc { 
    [feedbackMsg release]; 
    [super dealloc]; 
} 

- (void)viewDidUnload { 
    self.feedbackMsg = nil; 
} 

-(IBAction)showMailPicker:(id)sender { 
    // The MFMailComposeViewController class is only available in iPhone OS 3.0 or later. 
    // So, we must verify the existence of the above class and provide a workaround for devices running 
    // earlier versions of the iPhone OS. 
    // We display an email composition interface if MFMailComposeViewController exists and the device 
    // can send emails. Display feedback message, otherwise. 
    Class mailClass = (NSClassFromString(@"MFMailComposeViewController")); 

    if (mailClass != nil) { 
     //[self displayMailComposerSheet]; 
     // We must always check whether the current device is configured for sending emails 
     if ([mailClass canSendMail]) { 
      [self displayMailComposerSheet]; 
     } 
     else { 
      feedbackMsg.hidden = NO; 
      feedbackMsg.text = @"Device not configured to send mail."; 
     } 
    } 
    else { 
     feedbackMsg.hidden = NO; 
     feedbackMsg.text = @"Device not configured to send mail."; 
    } 
} 

-(IBAction)showSMSPicker:(id)sender { 
    // The MFMessageComposeViewController class is only available in iPhone OS 4.0 or later. 
    // So, we must verify the existence of the above class and log an error message for devices 
    //  running earlier versions of the iPhone OS. Set feedbackMsg if device doesn't support 
    //  MFMessageComposeViewController API. 
    Class messageClass = (NSClassFromString(@"MFMessageComposeViewController")); 

    if (messageClass != nil) {   
     // Check whether the current device is configured for sending SMS messages 
     if ([messageClass canSendText]) { 
      [self displaySMSComposerSheet]; 
     } 
     else { 
      feedbackMsg.hidden = NO; 
      feedbackMsg.text = @"Device not configured to send SMS."; 

     } 
    } 
    else { 
     feedbackMsg.hidden = NO; 
     feedbackMsg.text = @"Device not configured to send SMS."; 
    } 
} 

// Displays an email composition interface inside the application. Populates all the Mail fields. 
-(void)displayMailComposerSheet 
{ 
    MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init]; 
    picker.mailComposeDelegate = self; 

    [picker setSubject:@"My BMR Index Rating from Total:Health App"]; 


    // Set up recipients 
    //NSArray *toRecipients = [NSArray arrayWithObject:@""]; 

    //[picker setToRecipients:toRecipients]; 
    NSString *emailSharing = @"I Just discovered that I have a Target Heart Rate of"; 
    // Fill out the email body text 
    [picker setMessageBody:emailSharing isHTML:YES]; 

    [self presentModalViewController:picker animated:YES]; 
    [picker release]; 
} 

// Displays an SMS composition interface inside the application. 
-(void)displaySMSComposerSheet 
{ 
    MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init]; 
    picker.messageComposeDelegate = self; 
    NSString *SMSShare = @"I Just discovered that I have a Target Heart Rate of"; 
    // Fill out the email body text 
    picker.body = SMSShare; 

    [self presentModalViewController:picker animated:YES]; 
    [picker release]; 
} 

// Dismisses the email composition interface when users tap Cancel or Send. Proceeds to update the 
// message field with the result of the operation. 
- (void)mailComposeController:(MFMailComposeViewController*)controller 
      didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error { 

    feedbackMsg.hidden = NO; 
    // Notifies users about errors associated with the interface 
    switch (result) 
    { 
     case MFMailComposeResultCancelled: 
      feedbackMsg.text = @"Result: Mail sending canceled"; 
      break; 
     case MFMailComposeResultSaved: 
      feedbackMsg.text = @"Result: Mail saved"; 
      break; 
     case MFMailComposeResultSent: 
      feedbackMsg.text = @"Result: Mail sent"; 
      break; 
     case MFMailComposeResultFailed: 
      feedbackMsg.text = @"Result: Mail sending failed"; 
      break; 
     default: 
      feedbackMsg.text = @"Result: Mail not sent"; 
      break; 
    } 
    [self dismissModalViewControllerAnimated:YES]; 
} 


// Dismisses the message composition interface when users tap Cancel or Send. Proceeds to update the 
// feedback message field with the result of the operation. 
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller 
       didFinishWithResult:(MessageComposeResult)result { 

    feedbackMsg.hidden = NO; 
    // Notifies users about errors associated with the interface 
    switch (result) 
    { 
     case MessageComposeResultCancelled: 
      feedbackMsg.text = @"Result: SMS sending canceled"; 
      break; 
     case MessageComposeResultSent: 
      feedbackMsg.text = @"Result: SMS sent"; 
      break; 
     case MessageComposeResultFailed: 
      feedbackMsg.text = @"Result: SMS sending failed"; 
      break; 
     default: 
      feedbackMsg.text = @"Result: SMS not sent"; 
      break; 
    } 
    [self dismissModalViewControllerAnimated:YES]; 
} 

@end 

La question est évidemment que je ne sais pas comment procéder à la (si buttonIndex == 1) etc morceau de code pour ouvrir le courrier et SMS

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { 
    if(buttonIndex == 0) { 
    AppSupportView *controller = [[AppSupportView alloc] initWithNibName:@"AppSupportView" bundle:nil]; 
    controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
    [self presentModalViewController:controller animated:YES]; 
    [controller release]; 
    } 

    if(buttonIndex == 1) { 

    } 

    if(buttonIndex == 2) { 

    } 

} 

Toute aide serait appréciée.

Merci

Répondre

1

ressemble à toutes vos méthodes nécessaires sont déjà là .. juste ajouter [self showMailPicker:nil] ou [self showSMSPicker:nil] à

if(buttonIndex == 1) { 

} 

if(buttonIndex == 2) { 

} 

si votre deuxième bouton du haut est votre bouton sms, ajouter showSMSPicker à buttonIndex == 1

+0

Merci beaucoup, je savais que ce serait quelque chose de simple. J'avais déjà mis [self showMailPicker]; mais n'avait pas inclus le: nil et obtenait une méthode n'existe pas, retourne à l'erreur d'identification avec un Crash App. Cela a fonctionné parfaitement. Merci –

+0

si vous n'utilisez pas ces méthodes à partir d'Interface Builder, vous pouvez également modifier votre déclaration de méthode à partir de "- (IBAction) showMailPicker: (id) expéditeur;" à "- (void) showMailPicker;" .. alors vous pouvez appeler ces méthodes avec [self showMailPicker]; – Sascha

+0

Ah, c'était mon erreur. Je les ai changés d'IBAction à void, cependant j'ai quitté l'expéditeur: (id); dessus. Merci encore. –

Questions connexes