从 uitableview 填充电子邮件正文的最佳方法

Posted

技术标签:

【中文标题】从 uitableview 填充电子邮件正文的最佳方法【英文标题】:Best way to populate e-mail body from uitableview 【发布时间】:2011-11-13 03:03:24 【问题描述】:

好的,让我试着把它变成一个更好的问题。

我的应用中有一个 tableViewController,其中包含一些信息,用户希望通过电子邮件向某人发送来自 tableview 的数据。

我可以保留一个包含该信息的数组。

问题的难点在于如何使用objective-c 语言将来自tableview 的数据填充到消息正文中?

我必须创建一个包含所有 html 代码的巨大字符串吗?或者有更好/更简单的方法吗?即使它是一个简单的表格,只是为了让客户将其发送给某人。

我想任何解决方案/建议都可能是一个很好的途径,让我知道我应该如何处理这个问题。

【问题讨论】:

“看起来很像”是什么意思?你想要一些像表格视图的截图一样的东西吗?或者你想把你的项目排成一行? @quixoto :屏幕截图不起作用,因为它不会在您滚动的地方进一步捕捉项目,所以我想布局我的项目。知道如何格式化吗?我可以在那里扔一个数组,但它看起来很难看 【参考方案1】:

我他妈的搞定了! 如果你们想写一封包含 UITableViewController 数据的电子邮件 这就是我如何做到的。只要记住导入你的数据头文件...

#import Recipe.h //in the implementation file
#import Ingredients.h //in the implementation file
#import <MessageUI/MFMailComposeViewController.h> // this line gotta be in the header file

-(IBAction)sendmail
MFMailComposeViewController *composer = [[MFMailComposeViewController alloc] init];
[composer setMailComposeDelegate:self];
NSString *recipeTitle = @"<h5>Recipe name: ";
recipeTitle = [recipeTitle stringByAppendingFormat:recipe.name];
recipeTitle = [recipeTitle stringByAppendingFormat:@"</h5>"];

NSString *ingredientAmount = @"";
NSString *ingredientAisle = @"";
NSString *ingredientTitle = @"";

NSString *tableFirstLine = @"<table width='300' border='1'><tr><td>Ingredient</td><td>Amount</td><td>Aisle</td></tr>";
NSString *increments = @"";
increments = [increments stringByAppendingFormat:recipeTitle];
increments = [increments stringByAppendingFormat:tableFirstLine];
int i;

for (i=0; i < [ingredients count]; i++) 
    Ingredient *ingredient = [ingredients objectAtIndex:i];
    ingredientTitle = ingredient.name;
    ingredientAmount = ingredient.amount;
    ingredientAisle = ingredient.aisle;

    increments = [increments stringByAppendingFormat:@"<tr><td>"];
    increments = [increments stringByAppendingFormat:ingredientTitle];
    increments = [increments stringByAppendingFormat:@"</td><td>"];
    increments = [increments stringByAppendingFormat:ingredientAmount];
    increments = [increments stringByAppendingFormat:@"</td><td>"];
    increments = [increments stringByAppendingFormat:ingredientAisle];
    increments = [increments stringByAppendingFormat:@"</td></tr>"];
    if (i == [ingredients count]) 
        //IF THIS IS THE LAST INGREDIENT, CLOSE THE TABLE
        increments = [increments stringByAppendingFormat:@"</table>"];
    


NSLog(@"CODE:: %@", increments);

if ([MFMailComposeViewController canSendMail]) 
    [composer setToRecipients:[NSArray arrayWithObjects:@"123@abc.com", nil]];
    [composer setSubject:@"subject here"];
    [composer setMessageBody:increments isHTML:YES];
    [composer setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];
    [self presentModalViewController:composer animated:YES];
    [composer release];
else 
    [composer release];
    

这对我来说是一大步,如果你想在你的应用程序中创建有趣的(基本)工具,它实际上非常有用。 感谢这个面向 Objective-c 程序员的典型网站中的每一个人。

这就是你得到的结果。简单但很好的开始方式。

【讨论】:

如承诺的那样。这是屏幕截图。非常简单的表格,但基础知识都在这里。

以上是关于从 uitableview 填充电子邮件正文的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

自动打开默认电子邮件客户端并预填充内容

从 UITableView 中删除顶部填充

为啥 UITableView 不从数组中填充

从字典数组 Swift 中填充 UITableView

如何以编程方式从情节提要中填充静态 UITableView?

从 nsdictionary 填充 uitableview