我如何从 Xcode/Swift 中的 Table 查看单元格 insert/pass 向邮件正文发送一个值?

How can i insert/pass a value into a mail body from my Table View Cell in Xcode/Swift?

嗯,我的应用程序有问题。 只是说我是初学者:) 我有 TableViewControler 并且我正在将 func 与 dequeueReusableCell 一起使用到 return 我没问题的单元格。但问题是如何使用 MFMailComposeViewController.setMessageBody 将这个单元格及其值实现到正文邮件中? 我正在尝试传递一个在单元格中的命令,就像在 table 中一样。 table 需要在邮件正文中可见。此参数仅采用 String 并且单元格不可见(在此处的范围内)。也许我应该将单元格转换为 html?我应该怎么做?

//这个values/cells我需要实现成邮件正文//

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITable视单元{ 让 cell = tableView.dequeueReusableCell(withIdentifier: "OrderProductsCell", for: indexPath) 作为! OrderViewCell

    let rowData = orderedProducts[indexPath.row]
    cell.lblNameOfOrderProduct.text = rowData.selectedProducts.name + " " +  rowData.selectedProducts.packaging + " " + rowData.selectedProducts.volume + " " + String(rowData.stepperNumber) + " x(kom)"
    cell.lblFromDistributor.text = "Od"
    cell.lblToStore.text = "Za"
    cell.tfOrderFromDistibutor.text = String(rowData.distibutor)
    cell.tfOrderToStore.text = String(rowData.store)
    cell.tfOrderFromDistibutor.isUserInteractionEnabled = false
    cell.tfOrderToStore.isUserInteractionEnabled = false
   
  
    return cell
    
}

//这是 MFMailComposeViewControlles - 在与 Table View

相同的控制器中
func showMailComposer() {
    guard MFMailComposeViewController.canSendMail() else {
       defAlert(name: "You Can't sent mail", message: "")
        return
    }
    
    let composer = MFMailComposeViewController()
    composer.mailComposeDelegate = self
    composer.setToRecipients(["sample@.com"])
    composer.setSubject("Porudzbina")
    composer.setMessageBody ("Here i need to implement cell", isHTML: false) 
    present(composer,animated: true)
}

我不确定我是否完全理解您的最终目标,但让我分享一下您的意思。

我相信您希望 table 视图中的所有文本都以文本形式显示在 MailView 中。

我知道你所有的产品数据都在里面 orderedProducts - 如果我错了请纠正我?

所以在你的 showMailComposer 函数中,你可以试试这个 - 我已经为我添加到你的函数的新代码添加了注释:

func showMailComposer() {
    guard MFMailComposeViewController.canSendMail() else {
       defAlert(name: "You Can't sent mail", message: "")
        return
    }
    
    // Start empty string
    var stringBuilder = ""
    
    // Loop through all your products
    for orderedProduct in orderedProducts
    {
        // Append string builder with products
        // Add all product properties you want
        stringBuilder += "\(orderedProduct.name), \(orderedProduct.packaging) \n"
    }
    
    let composer = MFMailComposeViewController()
    composer.mailComposeDelegate = self
    composer.setToRecipients(["sample@.com"])
    composer.setSubject("Porudzbina")
    
    // Add string builder as text
    composer.setMessageBody (stringBuilder, isHTML: false)
    
    present(composer,animated: true)
}

运行 这个结果并检查它是否接近你想要的,它会给出这样的输出:

更新

如果您想在 MFMailComposeViewController 中更好地格式化文本,您可以使用 HTML 并且您需要了解 HTML 的一些基础知识,例如您建议的 table 或其他div.

等技巧

这是您的函数使用 table 组织输出的示例:

func showMailComposer() {
    guard MFMailComposeViewController.canSendMail() else {
       defAlert(name: "You Can't sent mail", message: "")
        return
    }
    
    // Start htmlStringBuilder with opening table tag and 2 headers / columns
    // named Name and Packaging
    var htmlStringBuilder = "<table border = 1><tr><th style=\"padding:10px\">Name</th><th style=\"padding:10px\">Packaging</th></tr>"
    
    // Loop through all your products
    for orderedProduct in orderedProducts
    {
        // Start a new table row
        htmlStringBuilder += "<tr>"
        
        // Add name table data for this row in first column
        htmlStringBuilder += "<td>\(orderedProduct.name)</td>"
        
        // Add packaging table data for this row in second column
        htmlStringBuilder += "<td>\(orderedProduct.name)</td>"
        
        // End the current row
        htmlStringBuilder += "<tr>"
    }
    
    // End html tag
    htmlStringBuilder += "</table>"
    
    let composer = MFMailComposeViewController()
    composer.mailComposeDelegate = self
    composer.setToRecipients(["sample@.com"])
    composer.setSubject("Porudzbina")
    
    // Add htmlStringBuilder builder as html
    composer.setMessageBody (htmlStringBuilder, isHTML: true)
    
    present(composer,animated: true)
}

上面代码生成的HTML其实是这样的

<table border="1">
  <tr>
    <th style="padding:10px">Name</th>
    <th style="padding:10px">Packaging</th>
  </tr>
  <tr>
    <td>Test</td>
    <td>Test</td>
  </tr>
  <tr></tr>
  <tr>
    <td>Test 2</td>
    <td>Test 2</td>
  </tr>
  <tr></tr>
</table>

最终结果为您提供 table.

中组织的数据

这只是基本的 HTML,您可以根据需要进行更多样式设置和更改输出的外观。