2017-03-17 2 views
0

Ich versuche MFMailComposeViewController() in zwei Zellen zu implementieren (Betreff "Feedback" und "Feedback2").MFMailComposeViewController nicht aufgerufen

Wenn ich jede Zelle auswählen, funktioniert "Feedback" gut, aber "Feedback2" wird nicht aufgerufen.

Es scheint kein Problem, aber ich finde es schwierig, das Problem zu beheben.

 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 

     tableView.deselectRow(at: indexPath, animated: true) 

     if indexPath.row == 0 { 
      let message = "hey download this app" 
      let shareView = UIActivityViewController(activityItems: [message], applicationActivities: nil) 
      self.present(shareView, animated: true, completion: nil) 

     } else if indexPath.row == 1 { 
      let mailCompose = MFMailComposeViewController() 

      mailCompose.mailComposeDelegate = self 

      mailCompose.setToRecipients(["gmail.com"]) 

      mailCompose.setSubject("feedback") 

      mailCompose.setMessageBody("text", isHTML: false) 

      if MFMailComposeViewController.canSendMail() 

      { 

       self.present(mailCompose, animated: true, completion: nil) 

      } else if indexPath.row == 2 { 
       let mailCompose = MFMailComposeViewController() 

       mailCompose.mailComposeDelegate = self 

       mailCompose.setToRecipients(["[email protected]"]) 

       mailCompose.setSubject("feedback2") 

       mailCompose.setMessageBody("text", isHTML: false) 

       if MFMailComposeViewController.canSendMail() 

       { 

        self.present(mailCompose, animated: true, completion: nil) 

       } 

      else{ 

       print("error...!") 

      } 
     } 

    func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) { 

     controller.dismiss(animated: true, completion: nil) 

    } 
+0

@ risa18 Fehler Ich denke, man indexPath.row == rufen 2 Inside indexPath.row == 1. –

Antwort

2

Ihre else if indexPath.row == 2 ist eine Stufe eingerückt zu tief - seine else-!MFMailComposeViewController.canSendMail() bezieht, nicht die vorherige indexPath überprüfen. Sie müssen diesen Zweig eine Ebene nach außen verschieben, um den gewünschten Effekt zu erzielen.

Für die Zukunft könnte es einfacher sein zu debuggen, wenn Sie eine einzelne Methode für Ihre E-Mail-Komponieren alle Refactoring aus:

private func sendMail(to recipient: String, subject: String) { 
    if !MFMailComposeViewController.canSendMail() { 
     return 
    } 

    let mailCompose = MFMailComposeViewController() 
    mailCompose.mailComposeDelegate = self 
    mailCompose.setToRecipients([recipient]) 
    mailCompose.setSubject(subject) 
    mailCompose.setMessageBody("text", isHTML: false) 
    self.present(mailCompose, animated: true, completion: nil) 
} 

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    switch indexPath.row { 
     case 0: /* activity view controller stuff */ break; 
     case 1: 
      sendMail(to: "gmail.com", subject: "feedback") 
      break; 
     case 2: 
      sendMail(to: "[email protected]", subject: "feedback2") 
      break; 
    } 
} 
+1

Es ist auch wirklich nützlich, immer eine Klammer in der gleichen Tiefe wie ihre 'else/if'-Anweisung zu haben, um sicherzustellen, dass dies nicht mehr passieren wird. – Eric

+1

Und bitte überprüfen Sie, ob Sie E-Mail senden können, bevor Sie den Composer erstellen und einrichten. – rmaddy

+0

@Tim es löste das Problem, vielen Dank! – risa8

Verwandte Themen