ios开发——实用技术篇Swift篇&地址薄、短信、邮件
//返回按钮事件 @IBAction func backButtonClick() { self.navigationController?.popViewControllerAnimated(true) } //新增联系人 @IBAction func addPeople () { //取得电话薄句柄 var error:Unmanaged<CFError>? var addressBook: ABAddressBookRef? = ABAddressBookCreateWithOptions(nil, &error).takeRetainedValue() var newContact:ABRecordRef! = ABPersonCreate().takeRetainedValue() var success:Bool = false //昵称 success = ABRecordSetValue(newContact, kABPersonNicknameProperty, "Gaven", &error) println("设置昵称是否成功: \(success)") //设置姓 success = ABRecordSetValue(newContact, kABPersonFirstNameProperty, "zhang", &error) println("设置姓是否成功: \(success)") //设置名 success = ABRecordSetValue(newContact, kABPersonLastNameProperty, "wu", &error) println("设置名是否成功:\(success)") //添加电话 let tmpMutableMultiPhones:ABMutableMultiValue = ABMultiValueCreateMutable( ABPropertyType(kABStringPropertyType)).takeRetainedValue() success = ABMultiValueAddValueAndLabel(tmpMutableMultiPhones, ", "companyPhone", nil); println("设置电话标题是否成功:\(success)") success = ABRecordSetValue(newContact, kABPersonPhoneProperty, tmpMutableMultiPhones, nil) println("设置电话是否成功:\(success)") //添加邮箱 let addr:ABMutableMultiValue = ABMultiValueCreateMutable( ABPropertyType(kABStringPropertyType)).takeRetainedValue() ABMultiValueAddValueAndLabel(addr, "185@leadingdo.com", "companyEmail", nil) println("设置邮箱标题是否成功:\(success)") ABRecordSetValue(newContact, kABPersonEmailProperty, addr, nil) println("设置邮箱是否成功:\(success)") //保存记录 success = ABAddressBookAddRecord(addressBook, newContact, &error) println("保存记录是否成功:? \(success)") //保存数据库 success = ABAddressBookSave(addressBook, &error) println("修改数据库是否成功: \(success)") } //删除联系人 @IBAction func deletePeople() { //定义错误标记 var error:Unmanaged<CFError>? //取得电话薄句柄 var addressBook: ABAddressBookRef? = ABAddressBookCreateWithOptions(nil, &error).takeRetainedValue() //读取通讯录 let sysAddressBookStatus = ABAddressBookGetAuthorizationStatus() if sysAddressBookStatus == .Denied || sysAddressBookStatus == .NotDetermined { // Need to ask for authorization var authorizedSingal:dispatch_semaphore_t = dispatch_semaphore_create() var askAuthorization:ABAddressBookRequestAccessCompletionHandler = { success, error in if success { ABAddressBookCopyArrayOfAllPeople(addressBook).takeRetainedValue() as NSArray dispatch_semaphore_signal(authorizedSingal) } } ABAddressBookRequestAccessWithCompletion(addressBook, askAuthorization) dispatch_semaphore_wait(authorizedSingal, DISPATCH_TIME_FOREVER) } var sysContacts:NSArray = ABAddressBookCopyArrayOfAllPeople(addressBook).takeRetainedValue() as NSArray //遍历通讯录 for contact in sysContacts { var currentContact:Dictionary = [String:String]() // 姓 // var firstName = ABRecordCopyValue(contact, kABPersonFirstNameProperty)?.takeRetainedValue() as String? ?? "" //2015年5月2号修改 var firstName = ABRecordCopyValue(contact, kABPersonFirstNameProperty)?.takeRetainedValue() as! String? ?? "" println("姓:\(firstName)") // 名 // var lastName = ABRecordCopyValue(contact, kABPersonLastNameProperty)?.takeRetainedValue() as String? ?? "" //2015年5月2号修改 var lastName = ABRecordCopyValue(contact, kABPersonLastNameProperty)?.takeRetainedValue() as! String? ?? "" println("名:\(lastName)") var success:Bool = false if firstName == "zhang" && lastName == "wu" { success = ABAddressBookRemoveRecord(addressBook, contact, nil); println("删除是否成功: \(success)") } //保存数据库 success = ABAddressBookSave(addressBook, &error) println("修改数据库是否成功: \(success)") } } //代码获取地址薄 @IBAction func codeToAddressButtonClick() { //定义错误标记 var error:Unmanaged<CFError>? //取得电话薄句柄 var addressBook: ABAddressBookRef? = ABAddressBookCreateWithOptions(nil, &error).takeRetainedValue() //发出授权信息,界面会弹出提示窗口 let sysAddressBookStatus = ABAddressBookGetAuthorizationStatus() //获取电话薄 if sysAddressBookStatus == .Denied || sysAddressBookStatus == .NotDetermined { // Need to ask for authorization var authorizedSingal:dispatch_semaphore_t = dispatch_semaphore_create() var askAuthorization:ABAddressBookRequestAccessCompletionHandler = { success, error in if success { //获取的联系人信息数组 var sysContacts:NSArray = ABAddressBookCopyArrayOfAllPeople(addressBook).takeRetainedValue() as NSArray //循环读取联系人 for contact in sysContacts { var currentContact:Dictionary = [String:String]() /* 部分单值属性 */ // 姓 // var firstName = ABRecordCopyValue(contact, kABPersonFirstNameProperty)?.takeRetainedValue() as String? ?? "" //2015年5月2号修改 var firstName = ABRecordCopyValue(contact, kABPersonFirstNameProperty)?.takeRetainedValue() as! String? ?? "" println("姓:\(firstName)") // 名 // var lastName = ABRecordCopyValue(contact, kABPersonLastNameProperty)?.takeRetainedValue() as String? ?? "" //2015年5月2号修改 var lastName = ABRecordCopyValue(contact, kABPersonLastNameProperty)?.takeRetainedValue() as! String? ?? "" println("名:\(lastName)") // 昵称 // var nikename = ABRecordCopyValue(contact, kABPersonNicknameProperty)?.takeRetainedValue() as String? ?? "" //2015年5月2号修改 var nikename = ABRecordCopyValue(contact, kABPersonNicknameProperty)?.takeRetainedValue() as! String? ?? "" println("昵称:\(nikename)") // 公司(组织) // var organization = ABRecordCopyValue(contact, kABPersonOrganizationProperty)?.takeRetainedValue() as String? ?? "" //2015年5月2号修改 var organization = ABRecordCopyValue(contact, kABPersonOrganizationProperty)?.takeRetainedValue() as! String? ?? "" println("公司(组织):\(organization)") // 职位 // var jobTitle = ABRecordCopyValue(contact, kABPersonJobTitleProperty)?.takeRetainedValue() as String? ?? "" //2015年5月2号修改 var jobTitle = ABRecordCopyValue(contact, kABPersonJobTitleProperty)?.takeRetainedValue() as! String? ?? "" println("职位:\(jobTitle)") // 部门 // var department = ABRecordCopyValue(contact, kABPersonDepartmentProperty)?.takeRetainedValue() as String? ?? "" //2015年5月2号修改 var department = ABRecordCopyValue(contact, kABPersonDepartmentProperty)?.takeRetainedValue() as! String? ?? "" println("部门:\(department)") //备注 // var note = ABRecordCopyValue(contact, kABPersonNoteProperty)?.takeRetainedValue() as String? ?? "" //2015年5月2号修改 var note = ABRecordCopyValue(contact, kABPersonNoteProperty)?.takeRetainedValue() as! String? ?? "" println("备注:\(note)") /* 部分多值属性 */ // 电话 var propertyValues:ABMultiValueRef? = ABRecordCopyValue(contact, kABPersonPhoneProperty)?.takeRetainedValue() if propertyValues != nil { ..< ABMultiValueGetCount(propertyValues) { var label:String = ABMultiValueCopyLabelAtIndex(propertyValues, i).takeRetainedValue() as String var value = ABMultiValueCopyValueAtIndex(propertyValues, i) var phone = value.takeRetainedValue() as? String ?? "" println("\(label):\(phone)"); } } // E-mail var emailValues:ABMultiValueRef? = ABRecordCopyValue(contact, kABPersonEmailProperty)?.takeRetainedValue() if emailValues != nil { ..< ABMultiValueGetCount(emailValues) { var label:String = ABMultiValueCopyLabelAtIndex(emailValues, i).takeRetainedValue() as String var value = ABMultiValueCopyValueAtIndex(emailValues, i) var email = value.takeRetainedValue() as? String ?? "" println("\(label):\(email)"); } } // 地址 var addressValues:ABMultiValueRef? = ABRecordCopyValue(contact, kABPersonAddressProperty)?.takeRetainedValue() if addressValues != nil { ..< ABMultiValueGetCount(addressValues) { var label:String = ABMultiValueCopyLabelAtIndex(addressValues, i).takeRetainedValue() as String // var value = ABMultiValueCopyValueAtIndex(addressValues, i) // var addrNSDict:NSMutableDictionary = value.takeRetainedValue() as NSMutableDictionary // // var _Country = addrNSDict.valueForKey(kABPersonAddressCountryKey) as? String ?? "" // var _State = addrNSDict.valueForKey(kABPersonAddressStateKey) as? String ?? "" // var _City = addrNSDict.valueForKey(kABPersonAddressCityKey) as? String ?? "" // var _Street = addrNSDict.valueForKey(kABPersonAddressStreetKey) as? String ?? "" // var _Contrycode = addrNSDict.valueForKey(kABPersonAddressCountryCodeKey) as? String ?? "" //2015年5月2号修改 var value = ABMultiValueCopyValueAtIndex(addressValues, i) var addrNSDict:NSMutableDictionary = value.takeRetainedValue() as! NSMutableDictionary var _Country = addrNSDict.valueForKey(kABPersonAddressCountryKey as String) as? String ?? "" var _State = addrNSDict.valueForKey(kABPersonAddressStateKey as String) as? String ?? "" var _City = addrNSDict.valueForKey(kABPersonAddressCityKey as String) as? String ?? "" var _Street = addrNSDict.valueForKey(kABPersonAddressStreetKey as String) as? String ?? "" var _Contrycode = addrNSDict.valueForKey(kABPersonAddressCountryCodeKey as String) as? String ?? "" //或 // var _Country = "" // var _State = "" // var _City = "" // var _Street = "" // var _Contrycode = "" // // if let value:String = addrNSDict.valueForKey(kABPersonAddressCountryKey as String) as? String // { // _Country = value // } // // if let value:String = addrNSDict.valueForKey(kABPersonAddressStateKey as String) as? String // { // _State = value // } // // if let value:String = addrNSDict.valueForKey(kABPersonAddressCityKey as String) as? String // { // _City = value // } // // if let value:String = addrNSDict.valueForKey(kABPersonAddressStreetKey as String) as? String // { // _Street = value // } // // if let value:String = addrNSDict.valueForKey(kABPersonAddressCountryCodeKey as String) as? String // { // _Contrycode = value // } println("\(label)==_Country:\(_Country) _State:\(_State) _City:\(_City) _Street:\(_Street) _Contrycode:\(_Contrycode)"); } } // 纪念日 var dateValues:ABMultiValueRef? = ABRecordCopyValue(contact, kABPersonDateProperty)?.takeRetainedValue() if dateValues != nil { ..< ABMultiValueGetCount(dateValues) { var label:String = ABMultiValueCopyLabelAtIndex(dateValues, i).takeRetainedValue() as String var value = ABMultiValueCopyValueAtIndex(dateValues, i) var date = (value.takeRetainedValue() as? NSDate)?.description println("\(label):\(date)"); } } // URL var urlValues:ABMultiValueRef? = ABRecordCopyValue(contact, kABPersonURLProperty)?.takeRetainedValue() if urlValues != nil { ..< ABMultiValueGetCount(urlValues) { var label:String = ABMultiValueCopyLabelAtIndex(urlValues, i).takeRetainedValue() as String var value = ABMultiValueCopyValueAtIndex(urlValues, i) var url = value.takeRetainedValue() as? String ?? "" println("\(label):\(url)"); } } // SNS var snsValues:ABMultiValueRef? = ABRecordCopyValue(contact, kABPersonSocialProfileProperty)?.takeRetainedValue() if snsValues != nil { ..< ABMultiValueGetCount(snsValues) { var label:String = ABMultiValueCopyLabelAtIndex(snsValues, i).takeRetainedValue() as String var value = ABMultiValueCopyValueAtIndex(snsValues, i) // var snsNSDict:NSMutableDictionary = value.takeRetainedValue() as NSMutableDictionary // var _Username = snsNSDict.valueForKey(kABPersonSocialProfileUsernameKey) as? String ?? "" // var _URL = snsNSDict.valueForKey(kABPersonSocialProfileURLKey) as? String ?? "" // var _Serves = snsNSDict.valueForKey(kABPersonSocialProfileServiceKey) as? String ?? "" //2015年5月2后修改 var snsNSDict:NSMutableDictionary = value.takeRetainedValue() as! NSMutableDictionary var _Username = snsNSDict.valueForKey(kABPersonSocialProfileUsernameKey as String) as? String ?? "" var _URL = snsNSDict.valueForKey(kABPersonSocialProfileURLKey as String) as? String ?? "" var _Serves = snsNSDict.valueForKey(kABPersonSocialProfileServiceKey as String) as? String ?? "" println("\(label)==_Username:\(_Username) _URL:\(_URL) _Serves:\(_Serves)"); } } // IM var imValues:ABMultiValueRef? = ABRecordCopyValue(contact, kABPersonInstantMessageProperty)?.takeRetainedValue() if imValues != nil { ..< ABMultiValueGetCount(imValues) { var label:String = ABMultiValueCopyLabelAtIndex(imValues, i).takeRetainedValue() as String var value = ABMultiValueCopyValueAtIndex(imValues, i) // var imNSDict:NSMutableDictionary = value.takeRetainedValue() as NSMutableDictionary // var _Serves = imNSDict.valueForKey(kABPersonInstantMessageServiceKey) as? String ?? "" // var _Username = imNSDict.valueForKey(kABPersonInstantMessageUsernameKey) as? String ?? "" //2015年5月2后修改 var imNSDict:NSMutableDictionary = value.takeRetainedValue() as! NSMutableDictionary var _Serves = imNSDict.valueForKey(kABPersonInstantMessageServiceKey as String) as? String ?? "" var _Username = imNSDict.valueForKey(kABPersonInstantMessageUsernameKey as String) as? String ?? "" println("\(label)==_Serves:\(_Serves) _Username:\(_Username)"); } } } dispatch_semaphore_signal(authorizedSingal) } } ABAddressBookRequestAccessWithCompletion(addressBook, askAuthorization) dispatch_semaphore_wait(authorizedSingal, DISPATCH_TIME_FOREVER) } } //UI打开地址薄 @IBAction func uiToAddressButtonClick() { var picker = ABPeoplePickerNavigationController() picker.peoplePickerDelegate = self self.presentViewController(picker, animated: true, completion: { () -> Void in }) } // MARK: - ABPeoplePickerNavigationControllerDelegate func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!, didSelectPerson person: ABRecord!) { // 姓 // var firstName = ABRecordCopyValue(person, kABPersonFirstNameProperty)?.takeRetainedValue() as String? ?? "" //2015年5月2号修改 var firstName = ABRecordCopyValue(person, kABPersonFirstNameProperty)?.takeRetainedValue() as! String? ?? "" println("选中人的姓:\(firstName)") // 名 // var lastName = ABRecordCopyValue(person, kABPersonLastNameProperty)?.takeRetainedValue() as String? ?? "" //2015年5月2号修改 var lastName = ABRecordCopyValue(person, kABPersonLastNameProperty)?.takeRetainedValue() as! String? ?? "" println("选中人的名:\(lastName)") } func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!, didSelectPerson person: ABRecord!, property: ABPropertyID, identifier: ABMultiValueIdentifier) { } func peoplePickerNavigationControllerDidCancel(peoplePicker: ABPeoplePickerNavigationController!) { //取消 peoplePicker.dismissViewControllerAnimated(true, completion: { () -> Void in }) } func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!, shouldContinueAfterSelectingPerson person: ABRecord!) -> Bool { return true } func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!, shouldContinueAfterSelectingPerson person: ABRecord!, property: ABPropertyID, identifier: ABMultiValueIdentifier) -> Bool { return true } //发短信 // 添加MessageUI.framework框架 // // 为ViewController类 // 添加UINavigationControllerDelegate, MFMessageComposeViewControllerDelegate 接口 // 实现func messageComposeViewController(controller: MFMessageComposeViewController!, didFinishWithResult result: MessageComposeResult) @IBAction func sendSMSButtonClick() { //判断 if MFMessageComposeViewController.canSendText(){ let controller = MFMessageComposeViewController() // 设置短信内容 controller.body = "短信内容短信内容" // 设置收件人列表 controller.recipients = ["15900001111,18900001111,17011112222"] //设置代理 controller.messageComposeDelegate = self //打开界面 self.presentViewController(controller, animated: true, completion: nil) } else { let alert = UIAlertView(title: "提示信息", message: "本设备不能发短信", delegate: nil, cancelButtonTitle: "确定") alert.show() } } //代理 func messageComposeViewController(controller: MFMessageComposeViewController!, didFinishWithResult result: MessageComposeResult) { controller.dismissViewControllerAnimated(true, completion: nil) switch result.value{ case MessageComposeResultSent.value: println("短信已发送") case MessageComposeResultCancelled.value: println("短信已取消") case MessageComposeResultFailed.value: println("短信发送失败") default: break } } //打电话 @IBAction func phoneButtonClick() { //调用打电话功能--最简单最直接的方式:直接跳到拨号界面 UIApplication.sharedApplication().openURL(NSURL(string: "tel://10086")!) } // 该实例说明了如何使用MessageUI框架组成并在程序内部发送邮件和短信。 // // 该应用使用MessageUI框架的MFMailComposeViewController类和MFMessageComposeViewController类,这两个类分别管理用户界面并充许用户在程序内部集成发送邮件和短信。 // // 该实例显示两个按钮,一个为“发送邮件”,另一个为“发送短信”。 // // 当用户单击“发送邮件”与“发送短信”时,应用分别显示集成的邮件集成界面与短信集成界面。 // // 应用不但检查它们的集成界面是否存在,还检查设备是否已经配置为了可以发送邮件和短信。另处,它提供了反馈消息。 // MFMailComposeViewControllerDelegate //发邮件 @IBAction func sendEmailButtonClick() { if MFMailComposeViewController.canSendMail() { var picker = MFMailComposeViewController() picker.mailComposeDelegate = self //设置主题 picker.setSubject("这是一个主题") //设置发件人 picker.setToRecipients(["1@leadingdo.com","2@leadingdo.com","3@leadingdo.com"]) //设置抄送人 picker.setCcRecipients(["cc1@leadingdo.com","cc2@leadingdo.com"]) //设置密送人 picker.setBccRecipients(["bcc@leadingdo.com"]) //添加图片附件 var path = NSBundle.mainBundle().pathForResource("SwiftClassWeiXin.png", ofType: "") var myData = NSData(contentsOfFile: path!) picker.addAttachmentData(myData, mimeType: "image/png", fileName: "swift.png") //设置邮件正文内容-支持html picker.setMessageBody("这是邮件正文", isHTML: false) //打开界面 self.presentViewController(picker, animated: true, completion: nil) } else { let alert = UIAlertView(title: "提示信息", message: "本设备不能发邮件", delegate: nil, cancelButtonTitle: "确定") alert.show() } } //发送邮件代理方法 func mailComposeController(controller: MFMailComposeViewController!, didFinishWithResult result: MFMailComposeResult, error: NSError!) { controller.dismissViewControllerAnimated(true, completion: nil) switch result.value{ case MFMailComposeResultCancelled.value: println("邮件已取消") break; case MFMailComposeResultSaved.value: println("邮件已保存") break; case MFMailComposeResultSent.value: println("邮件已发送") break; case MFMailComposeResultFailed.value: println("邮件发送失败") break; default: println("邮件没有发送") break; } } override func viewDidLoad() { super.viewDidLoad() if titleString != nil && titleString != ""{ titleLabel.text = titleString }else{ titleLabel.text = "第12章 地址薄、短信、邮件"; } // Do any additional setup after loading the view. }
ios开发——实用技术篇Swift篇&地址薄、短信、邮件的更多相关文章
- ios开发——实用技术篇Swift篇&播放MP3
播放MP3 // MARK: - 播放MP3 /*----- mp3 ------*/ //定时器- func updateTime() { //获取音频播放器播放的进度,单位秒 var cuTime ...
- ios开发——实用技术篇Swift篇&系统声音
系统声音 // MARK: - 系统声音 /*----- 系统声音 ------*/ @IBAction func systemSound() { //建立的SystemSoundID对象 var s ...
- ios开发——实用技术篇Swift篇&拍照
拍照 // MARK: - 拍照 func fromPhotograph() { if UIImagePickerController.isSourceTypeAvailable(.Camera) { ...
- ios开发——实用技术篇Swift篇&照片选择
照片选择 // MARK: - 选择照片 /*----- 选择照片 ------*/ @IBAction func addImageButtonClick() { let actionSheet = ...
- ios开发——实用技术篇Swift篇&视频
视频 // MARK: - 播放视频 /*----- 播放视频 ------*/ func moviePlayerPreloadFinish(notification:NSNotification) ...
- ios开发——实用技术篇Swift篇&录音
录音 // MARK: - 录音 /*----- 录音 ------*/ var recorder:AVAudioRecorder? //录音器 var player:AVAudioPlayer? / ...
- ios开发——实用技术篇Swift篇&加速计和陀螺仪
加速计和陀螺仪 //返回按钮事件 @IBAction func backButtonClick() { self.navigationController?.popViewControllerAnim ...
- ios开发——实用技术篇Swift篇&多点触摸与手势识别
多点触摸与手势识别 //点击事件 var atap = UITapGestureRecognizer(target: self, action: "tapDo:") self.vi ...
- ios开发——实用技术篇OC篇&iOS的主要框架
iOS的主要框架 阅读目录 Foundation框架为所有的应用程序提供基本系统服务 UIKit框架提供创建基于触摸用户界面的类 Core Data框架管着理应用程序数据模型 Core ...
随机推荐
- mybatis中的变量#与$
ibatis中使用select top #num# * from tableName出现错误.由于初次用ibatis还不知道在它里边拼写SQL语句的一些规则,导致一些自认为很平常的SQL语句,在它这里 ...
- C# Read/Write another Process' Memory z
http://www.codeproject.com/Articles/670373/Csharp-Read-Write-another-Process-Memory This article aim ...
- codeforces 687B - Remainders Game 数学相关(互质中国剩余定理)
题意:给你x%ci=bi(x未知),是否能确定x%k的值(k已知) ——数学相关知识: 首先:我们知道一些事情,对于k,假设有ci%k==0,那么一定能确定x%k的值,比如k=5和ci=20,知道x% ...
- lightoj 1024 (高精度乘单精度)
题意:给你一些数,求它们的最小公倍数,结果可能会很大. 统计出每个素因子出现的最大次数,把他们相乘即可,需要高精度. #include<cmath> #include<cstdio& ...
- IOS PUSH 实践操作~~~~
1.推送过程简介 (1)App启动过程中,使用UIApplication::registerForRemoteNotificationTypes函数与苹果的APNS服务器通信,发出注册远 ...
- 【Opencv 小工具】鼠标选区信息获取
有时候在目标跟踪的算法初始化工作时候,需要选区一个Rect区域,来表示要跟着的目标,所以有次小工具. 使用QT和opencv 编写 项目地址 https://github.com/wzyuliyang ...
- Hadoop学习之--Capaycity Scheduler源码分析
Capacity Scheduler调度策略当一个新的job是否允许添加到队列中进行初始化,判断当前队列和用户是否已经达到了初始化数目的上限,下面就从代码层面详细介绍整个的判断逻辑.Capaycity ...
- 在Heroku上部署MEAN
说明:个人博客地址为edwardesire.com,欢迎前来品尝. Heroku是国外普遍使用大受好评的PaaS,支持Nodejs,基础服务(Nodejs+MongoDB)基本都是免费的.搭建MEAN ...
- mongodb 新建用户 -摘自网络
随着版本的更新,对在使用mongodb的业务也进行了版本升级,但是在drop掉一个数据库时,问题来了,原来的用户随着删除库也被删除掉,但是再想通过原来的语法db.addUser()添加,一直报错,提示 ...
- Window下开发React-Native Android步骤
1.安装Android开发环境 下载并安装JDK 下载并安装Android SDK, Android NDK 启动SDK下面的SDK Manager.exe,安装相关SDK Platform-tool ...