我如何从 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,您可以根据需要进行更多样式设置和更改输出的外观。
嗯,我的应用程序有问题。 只是说我是初学者:) 我有 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,您可以根据需要进行更多样式设置和更改输出的外观。