当前位置: 首页 > 知识库问答 >
问题:

如何在 Xcode/Swift 中将值从我的表视图单元格插入/传递到邮件正文中?

魏岳
2023-03-14

嗯,我的应用程序有问题。只是说我是初学者:)我有TableViewController,我正在使用func和dequeueReusableCell来返回一个可以的单元格I。但是问题是如何使用MFMailComposeViewController.setMessageBody?将这些单元格及其值实现到正文邮件中,我正在尝试传递一个在单元格中的订单,就像在表格中一样。那个表格需要在邮件正文中可见。这个参数只需要字符串,单元格不可见(在这里的范围内)。也许我应该将单元格转换为html?我应该怎么做?

我需要在邮件正文中实现的这个值/单元格//

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -

    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
    
}

//这是mfmailcompositeviewcontrolles-在与表视图相同的控制器中

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)
}

共有1个答案

程树
2023-03-14

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

我相信您希望表格视图中的所有文本都以文本形式显示在邮件视图中。

我知道你所有的产品数据都在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)
}

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

更新

如果你想在MFMail复合视图控制器中更好地格式化文本,你可以使用HTML,你需要了解HTML的一些基础知识,如你所建议的表格或其他技术,如div。

以下是使用表格组织输出的函数示例:

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>

最终结果将数据组织在一个表格中。

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

 类似资料:
  • 我在TableViewController的单元格中有一个图形视图,我希望将一个数组从TableViewController传递给该视图。我该如何解决这个问题?

  • 问题内容: 我正在一个有两个秒和两个秒的项目上,当用户按下按钮时,第一个中的数据应该进入,第二个中的数据进入第二个。我的问题是,我不知道每次用户按下按钮时都如何放置数据,我知道如何插入数据,但是据我所知,这种方法只能工作一次。那么,每当用户按下按钮时,我可以使用哪种方法来更新? 问题答案: 单击按钮时,使用和插入新单元格。 首先将数据追加到tableview数组中 然后更新表格并插入新行 这将插入

  • Word显示图像有问题。我真的不知道问题出在哪里

  • 问题内容: 我想使用go lang在电子邮件正文中发送图像。从 https://github.com/scorredoira/email 现在,我可以将图像文件作为附件发送,但是我需要在电子邮件正文中发送图像文件。 提前致谢。 问题答案: 您可以使用Gomail(我是作者)。看一下Embed方法,它允许您将图像嵌入到电子邮件正文中:

  • 问题内容: 我正在使用Swift,在tableview的didSelectRowAtIndexPath方法中出现错误。我想将值传递给另一个视图控制器,即“ secondViewController”。这里,EmployeesId是一个数组。相关代码如下: 但是我收到此错误:致命错误:展开一个Optional值时意外发现nil。 任何帮助将不胜感激。 问题答案: 这是一个有两个假设的一般解决方案。首