iOS5编程--官方例子代码研究--6.MailComposer

鸿蒙OpenHarmony【外设驱动使用之Display VDI 接入】 子系统 显示VDI(Vendor Device Interface)接口是为了方便芯片厂商接入OpenHarmony显示驱动框架模型而提供的接口。 显示VDI接口分为Composer和Buffer部分 阅读详情

本文档版权归NickTang所有,没有本人书面或电子邮件允许,不许转载,摘录,发表。多谢!

我们很多时候需要在iOS程序中内置邮件发送功能,而这个例子基本上提供了我们所需要的所有功能。
注意一下几点
1.这个程序必须在设备上运行,关于如何在设备上运行程序,不是本文需要讲的,我会在以后的文章中讲述。
2.你的设备必须配置好一个邮件帐户,不然你没法看到好的效果。
3.关于如何发送多个附件,我会在最后提到。
4.基本的代码不会再分析,基础部分请看我前面的文章。
5.在你自己建立的工程中,比如加入后面这个framework:MessageUI.framework
分析代码如下:
1.

-(IBAction)showPicker:(id)sender

{

// This sample can run on devices running iPhone OS 2.0 or later  

// The MFMailComposeViewController class is only available in iPhone OS 3.0 or later. 

// So, we must verify the existence of the above class and provide a workaround for devices running 

// earlier versions of the iPhone OS. 

// We display an email composition interface if MFMailComposeViewController exists and the device can send emails.

// We launch the Mail application on the device, otherwise.

//上面的解释的非常清楚,关于这些类和api在那个版本中引入,必须加以关注。

//下面是一个动态运行期查询类名的一个很好的例子,不解释了,因为在前面的文章有解释到。

Class mailClass = (NSClassFromString(@"MFMailComposeViewController"));

if (mailClass != nil)

{

// We must always check whether the current device is configured for sending emails

if ([mailClass canSendMail])

{

[self displayComposerSheet];

}

else

{

[self launchMailAppOnDevice];

}

}

else

{

[self launchMailAppOnDevice];

}

}

所以重点关注函数displayComposerSheet:

-(void)displayComposerSheet 

{

MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];

picker.mailComposeDelegate = self;

[picker setSubject:@"Hello from California!"];


// Set up recipients

NSArray *toRecipients = [NSArray arrayWithObject:@"first@example.com"]; 

NSArray *ccRecipients = [NSArray arrayWithObjects:@"second@example.com", @"third@example.com", nil]; 

NSArray *bccRecipients = [NSArray arrayWithObject:@"fourth@example.com"]; 

[picker setToRecipients:toRecipients];

[picker setCcRecipients:ccRecipients];

[picker setBccRecipients:bccRecipients];

// Attach an image to the email

NSString *path = [[NSBundle mainBundle] pathForResource:@"rainy" ofType:@"png"];

    NSData *myData = [NSData dataWithContentsOfFile:path];

[picker addAttachmentData:myData mimeType:@"image/png" fileName:@"rainy"];

//代码非常清楚,我也不加以解释了,注意下面这个注释掉的地方,很多人问如何发送多个附件,就是下面演示的这样就可以多加一个附件,

//既多次调用addAttachmentData:fileName:

/*path = [[NSBundle mainBundle] pathForResource:@"circle" ofType:@"png"];

    myData = [NSData dataWithContentsOfFile:path];

[picker addAttachmentData:myData mimeType:@"image/png" fileName:@"circle"];*/

// Fill out the email body text

NSString *emailBody = @"It is raining in sunny California!";

[picker setMessageBody:emailBody isHTML:NO];

[self presentModalViewController:picker animated:YES];

    [picker release];

}


在点击发送后,协议

MFMailComposeViewControllerDelegate

的下面这个函数会被调用。

- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error 

{

message.hidden = NO;

// Notifies users about errors associated with the interface

switch (result)

{

case MFMailComposeResultCancelled:

message.text = @"Result: canceled";

break;

case MFMailComposeResultSaved:

message.text = @"Result: saved";

break;

case MFMailComposeResultSent:

message.text = @"Result: sent";

break;

case MFMailComposeResultFailed:

message.text = @"Result: failed";

break;

default:

message.text = @"Result: not sent";

break;

}

[self dismissModalViewControllerAnimated:YES];

}


上面的这个代码也是很简单的,所以也不再解释。

STM32F103结合HAL库实现蓝牙遥控四麦小车的PID闭环控制 本文详细介绍了如何使用STM32F103结合HAL库实现蓝牙遥控四麦小车的PID闭环控制。从硬件选型、电路搭建到PID算法实现与调参,全面解析了四麦小车的运动控制方案,特别强调了蓝牙通信协议设计和麦轮运动学解算的关键技术。 阅读详情

相关推荐

LightGBM学习笔记

LightGB学习笔记1. lightgbm概述1.1 lightgbm介绍1.2 lightgbm和xgboost对比2 .直方图算法及改进2.1 直方图算法2.2 直方图算法改进2.2.1 GOSS算法3.树的生长策略4.系统设计5. 实战 lightgbm是基于boosting的学习框架,使用的是基于决策树的学习算法,具有更快的训练速度、更低的内存使用、更高的正确率、并且能够支持并行化学习,可以用来处理大规模数据,本文主要是针对学习视频https://www.bilibili.com/video/BV

一一xi的博客 3304

Android Display 系统分析

Android Display 系统分析大概两年前做过一个项目,大致是在Android 系统上实现双显的支持,其中有个需求是需要手动配置每个显示器的旋转角度,当时对Android 的 Display系统有关简单了解,但是不够深入。一直觉得是留下了一个遗憾,现在趁有时间来把这一块再好好了解下。闲话少说,开始吧。本文将按照以下方式来组织:Android Display 框架 Android Surfac

小码农的小梦想 2万+

在Ansys Simplorer中设计三相逆变器,并与Maxwell FEA耦合,实现160kW PMSM

在这篇博文中,我们将探讨如何使用设计三相逆变器,并将其与Ansys Maxwell中的电磁有限元分析模型耦合,以获得准确的系统级结果。Ansys Electronics为多域仿真提供了强大的生态系统,可实现跨各种物理领域的无缝集成。Maxwell用于电磁有限元分析 (FEA),Simplorer(Twin Builder) 用于系统级逆变器和控制器设计,Icepak用于电子热仿真。例如,我们将使用 Simplorer 介绍160 kW、8 极永磁同步电机 (PMSM)的逆变器设计过程。让我们开始吧!

jkh920184196的博客 1423

(二)display库之文本、图形

  今天开始就正式开始 Corona SDK 引擎的学习了,引擎的开发语言为 Lua ,在学习之前需要先具备 Lua 的基础知识,博主在菜鸟教程入门。Corona SDK 的API有上千个,这里重点先列出几个常用的: 一、Corona SDK 之常用的API ① display ② composer ③ timer ④ widget ⑤ transition 官方API传送门 二、display之...

qq_42513611的博客 526

京东运维面试题及参考答案

cgroup(Control Group)是 Linux 内核提供的一种可以限制、控制与分离一个进程组群的资源(如 CPU、内存、磁盘 I/O 等)的机制。通过 cgroup,可以为不同的进程或进程组分配特定的资源配额,实现资源的隔离和管理。比如,在一个服务器上运行多个容器时,可以使用 cgroup 来限制每个容器对 CPU 和内存的使用,防止某个容器占用过多资源而影响其他容器的运行。cgroup 还可以对进程进行优先级设置,确保关键进程能够优先获得资源。

大模型大数据攻城狮的专栏 1236

【NLP】第十五章:隐马尔可夫——前向算法、后向算法、维特比算法、Baum-Welch算法

就是好比我现在知道了观测序列Observations、掩藏序列States,我试着去学一个最优的(π, A, B),让在这个(π, A, B)下,观测序列Observations、掩藏序列States的概率最大。(2)矩阵B就更好理解了,矩阵B的第一行表示我已经抽取的是盒子1,那我抽取白球的概率就是0.4,抽取黑球的概率就是0.6了,因为第一个盒子只有4白6黑嘛。三是,由于每次抽取的小球的颜色的概率不仅取决于,小球所在的盒子中的黑白球的比例,还取决于你是从哪个盒子中抽的,所以其实观测序列还对应着一个。

因为热爱所以坚持 1162

Composer使用

是什么 如果你知道yum、apt-get、npm、bower等命令中的一种或者多种,那么,你也能很快知道composer是什么了。没错,它就是PHP里快速安装类库的。平时,我们安装一个PHP类库,需要搜索->下载;使用composer,我们只要知道包名,直接composer insatll就可以了。 PHP 语言本身就带有强大的网络功能、文件管理功能和丰富的系统 API,Composer 也只

三生烟火的博客 1260

手把手教你学Simulink实例:基于Simulink的锂电池管理系统(BMS)仿真

是确保锂电池安全、高效运行的关键组件。BMS 主要功能包括监控电池的状态(如电压、电流、温度)、估算荷电状态(State of Charge, SOC)、健康状态(State of Health, SOH),以及实现电池均衡和保护机制等。Simulink 提供了一个强大的仿真环境,可以用来设计、分析和验证锂电池管理系统的控制策略。常见的均衡方法包括被动均衡(通过电阻放电)和主动均衡(通过开关电容或变压器)。通过本教程,我们详细介绍了如何使用 Simulink 进行锂电池管理系统的仿真实例。

MHD0815的博客 538

转载3

21、popover横竖屏位置改变解决办法 1、 delegate中 处理 - (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController {     userImageShow = NO;          if ([popoverController isEqual:my

code life 2117

TriCore架构-基于TC397的启动流程

TC397芯片的启动流程分为三个关键阶段:固件启动(BootFirmware)、Bootloader引导和应用程序启动。BootFirmware作为硬件信任根,包含SSW基础初始化、CHSW自检和BSL应急刷写通道。Bootloader承担安全验证和程序引导功能,支持双分区(AB-SWAP)和双引导方案(PBL/SBL)。安全启动通过校验机制确保软件完整性,提供三种可选技术方案。应用程序启动阶段实现软件双分区管理,支持SOTA更新。整个流程体现了汽车电子系统的安全设计理念,通过硬件级保护与软件验证相结合确保

xiandang8023的博客 987

uniapp微信小程序 - 详解map地图markers图标不显示问题,自定义图标真机调试不显示变成默认marker标记点图标(解决微信小程序map组件markers自定义图标失效,兼容安卓苹果手机)

uniapp微信小程序 map地图markers图标不显示,markers图标真机调试不显示,uniapp map地图显示图标markers问题,自定义图标不显示,添加marker后不显示,uniapp 微信小程序 map marker图标不显示如何解决,uniapp小程序地图的marker图标不显示问题,微信小程序map组件markers自定义图标真机显示问题,uni-app, 微信小程序, map组件, markers图标不显示, 真机调试, 微信小程序map组件,地图加载后marker标记点ios设备

🏆 前端领域优质创作者 2911

多媒体架构---display介绍

前言: 此篇blog从LCD原理、Display基础知识、DSI介绍、HDMI相关、display原理概念相关、安卓中的Display Graphics框架、Qcom display框架这些点给大家介绍Display。 一、Display Overview  1.显示应用领域(mobile,PC) 2.其他相关领域(投影仪、VR眼镜) 二、LCD显示原理 1.背光IC发出亮光,通过下偏光片,液晶阵,透过...

Neil驱动的博客 3313

大数据在电力行业的应用案例解析-【电力技术】(九)大数据在电力储能运维中的深度应用(含故障预测代码)

大数据技术为电力储能运维提供了“精准化、智能化、高效化”的解决方案,破解了传统运维的核心痛点,实现了储能系统从“被动抢修”到“主动运维”的转型,为新型电力系统建设提供了重要支撑。当前,随着储能产业的快速发展,大数据与储能运维的融合将更加深入,未来将结合人工智能、物联网、区块链等技术,实现储能运维的全流程智能化——从设备故障的提前预警,到寿命的精准预测,再到运维策略的自动优化、调度协同的实时响应,进一步提升储能系统的安全性、经济性与可靠性。

getusushu的博客 87

android的hwc浅析

注:本文档基于kk进行分析,着重于概念的精确定义和版本历史演变 一、关于hwc的介绍 广义的来讲是指利用硬件完成图像数据组合并显示的功能(能力),狭义的来讲就是指Hwcomposer HAL。 1、从广义的角度来分析,有几个概念需要精确定义(注意字母大小写差异) (1)hwc:利用硬件完成图像数据组合并显示的功能(能力),具体到代码级别它是由多个类如SurfaceFling

alien75的专栏 2万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

iOS5编程--官方例子代码研究--5.TableMultiSelect

本文档版权归NickTang所有,没有本人书面或电子邮件允许,不许转载,摘录,发表。多谢! 我们在使用tableview的时候,常常会用到删除功能,但是在5.0以前的版本中,我们没有办法一次通过界面删除多行,在iOS5中,这个功能加入近来了。 我们先看一下原先的删除界

NickTang的专栏 1万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

UIWebView和网页交互的研究初探

很多时候,我们使用UIWebView不是简单的显示一个网页这么简单的,我们需要更多的交互工作,譬如能否通过Objective-C的代码来控制网页的显示内容,能否监控网页上的点击事件等等,这里我是根据网上的资料做的演示,因此会有很多和网络已有的资料相同的地方。 此外,关于UIWe

NickTang的专栏 7793

使用NSObject中的函数起线程

下面的这些函数是定义在NSObject中的,关于它们的具体含义,你可以在官方文档中找,或者google之,这里就不啰嗦了。 Sending Messages – performSelector:withObject:afterDelay: – performSelect

NickTang的专栏 7614

iOS线程关键资源加锁

新建一个view-based application, viewcontroller.h的代码如下: #import @interface tConditionViewController : UIViewController {     int tickets;

NickTang的专栏 6712

使用NSThread起线程

NSThread是起线程的主角,大部分时候我们使用这个类。 由于本人macbook暂时不能用,所以这里只贴出代码: 建一个view-based application. 在viewcontroller.h中 @interface tNSThreadViewControll

NickTang的专栏 5868

iOS本地存储--c语言方式例子

背景,iOS其实和Mac的系统是一脉相承,而它们其实是unix的内核,所以你在unix(linux)上面可以使用的api,在这里也是可以用的。 很多时候,我们需要保存一些信息在本地,iOS SDK提供了很好的接口支持,但是有时候,我们可能需要使用标准C的方式存取文件,下面就是这

NickTang的专栏 4656

使用NSOperationQueue起线程

只有代码,解释以后加上: #import @interface tOQViewController : UIViewController {     NSOperationQueue *myOQ; } -(void)doSomething; @end

NickTang的专栏 2241

http请求的源码

网络编程是iOS开发的重要一环,重要性就不多讲了,下面的代码也比较简单,我在这里也不多解释了。       NSString *url = 。。。//这里打包URL   NSURLRequest *theRequest=[NSURLRequest requestWith

NickTang的专栏 2148
上一篇: Transitioning to ARC Release Notes
下一篇: Objective-C编程语言--简介
NickTang
博客等级 码龄24年 261粉丝 49原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值