Swift如何为设置中心添加常用功能

前言

在我们开发所有的应用中,通常会提供包含多项功能的设置中心。这些功能可以包括,给用户推荐自己的其他作品、邀请用户好评、提供反馈通道、邀请用户分享应用、打开官网或某些其他地址。 这些功能虽然用户使用频率不高,但对于应用的设置中心是必备的。

1.跳转到AppStore,邀请好评或推荐其他应用

2.提供系统邮件反馈通道

3.调取系统分享功能分享应用

4.在应用内打开网页,实现官方网址、应用更新说明或打开其他网址

通常设置中心由TableView或CollectionView创建,在didSelectRowAt中添加不同的点击反馈即可,这里就不再描述。

一、跳转到AppStore

应用内跳转到AppStore可以通过设置对应的应用地址即可,因此可以跳转到其他应用界面实现推荐应用,也可以跳转到自身应用的地址邀请用户好评。OneX系列产品都拥有推荐和评价的入口,两种入口的实现方式也都是一样的。 在不同的情况下我们只需要改变urlString末尾的ID即可,当让也可以封装在某一个函数中,通过参数进行改变具体的跳转地址。

let urlString = "itms-apps://itunes.apple.com/app/id1250290965"
if let url = URL(string: urlString) {
 //根据iOS系统版本,分别处理
 if #available(iOS 10, *) {
 UIApplication.shared.open(url, options: [:],
     completionHandler: {
     (success) in
 })
 } else {
 UIApplication.shared.openURL(url)
 }
}

二、邮件反馈功能

第一,需要导入框架MessageUI.framework,在项目设置Build Phases的Link Binary With Libraries中添加MessageUI.framework。 第二,在使用邮件反馈功能的页面文件中导入头文件import MessageUI。 第三,给所在Controller加上协议MFMailComposeViewControllerDelegate。

完成以上步骤之后,我们就可以开始写具体的使用代码了。 发送反馈邮件时,为了方便我们收到邮件时辨别是用户发来的反馈邮件,同时了解用户的系统、版本等信息,我们在发送函数中设置好标题与默认正文。 mailComposeVC.setToRecipients中添加收件邮箱地址,mailComposeVC.setSubject中添加邮件标题,mailComposeVC.setMessageBody设置正文内容。

//邮件发送函数
func configuredMailComposeViewController() -> MFMailComposeViewController {

 let mailComposeVC = MFMailComposeViewController()
 mailComposeVC.mailComposeDelegate = self

 //获取设备信息
 let deviceName = UIDevice.current.name
 // let deviceModel = UIDevice.current.model
 let systemVersion = UIDevice.current.systemVersion
 let deviceUUID = UIDevice.current.identifierForVendor?.uuidString

 //获取APP信息
 let infoDic = Bundle.main.infoDictionary
 // 获取App的版本号
 let appVersion = infoDic?["CFBundleShortVersionString"] ?? "appVersion"
 // 获取App的build版本
 let appBuildVersion = infoDic?["CFBundleVersion"] ?? "appBuildVersion"
 // 获取App的名称
 let appName = infoDic?["CFBundleDisplayName"] ?? "OneClock"

 //设置邮件地址、主题及正文
 mailComposeVC.setToRecipients(["<xdehang@gmail.com>"])
 mailComposeVC.setSubject("OneScreen "+String(describing: appVersion)+" - "+NSLocalizedString("FeedBack Mail From", comment: "FeedBack Mail From")+" "+deviceName)

 let content:String = "\n \n \n \n Device:\(deviceName)\n System:\(systemVersion)\n App Version:\(String(describing: appVersion))"

 mailComposeVC.setMessageBody(NSLocalizedString("<Start To Write Mail>", comment: "<Start To Write Mail>")+content, isHTML: false)
 return mailComposeVC
}

再需要添加邮件系统提示和邮件发送检测。

//邮件系统提示
func showSendMailErrorAlert() {
 let sendMailErrorAlert = UIAlertController(title: NSLocalizedString("Unable To Send", comment: "Unable To Send"), message: NSLocalizedString("Your device has not been set up, please set in the mail application and then try to send.", comment: "Your device has not been set up, please set in the mail application and then try to send."), preferredStyle: .alert)
 sendMailErrorAlert.addAction(UIAlertAction(title: NSLocalizedString("Confirm", comment: "Confirm action title"), style: .default) { _ in })
 self.present(sendMailErrorAlert, animated: true){}

}
//邮件发送检测
func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {

 switch result.rawValue {
 case MFMailComposeResult.cancelled.rawValue:
 print("取消发送")
 case MFMailComposeResult.sent.rawValue:
 print("发送成功")
 default:
 break
 }
 self.dismiss(animated: true, completion: nil)
}

最后我们在调用邮件反馈的地方,需要先判断是否能够发送,如果不能发送通过提示信息告诉用户失败原因,如果可以发送将成功调取发送窗口。 在需要邮件反馈的地方:

if MFMailComposeViewController.canSendMail() {
 //注意这个实例要写在if block里,否则无法发送邮件时会出现两次提示弹窗(一次是系统的)
 let mailComposeViewController = configuredMailComposeViewController()
 self.present(mailComposeViewController, animated: true, completion: nil)

} else {
 self.showSendMailErrorAlert()
}

三、系统分享功能

分享前,我们需要设置好分享的信息:标题、图片、链接。

var webUrl:String = "https://itunes.apple.com/cn/app/id1355476695"
var urlTitle:String = "OneScreen"
var urlImage:UIImage = #imageLiteral(resourceName: "onescreen_icon")

这里使用了var,是为了在特殊情况下改变他们的值,具体的调用方式如下:

let shareVC:UIActivityViewController = UIActivityViewController(activityItems: [self.urlTitle,self.urlImage,self.webUrl], applicationActivities: nil)

self.present(shareVC, animated: true, completion: {
 print("shareVC success")
})

四、打开某些网址

打开网址可以实现“官方网址”、“应用更新说明”功能,更新说明我们可以通过更新Web内容快速高速用户更新列表。如果你的应用需要比较多的教程,也可以通过网页的形式展现。为了方便用户反馈,我通常会增加一个微博入口,让用户打开微博地址快速与我联系进行反馈。

这个功能我们需要创建一个承载网页内容的Web页面,因此需要先添加带有WebView的Controller。 在其他页面打开Web时,通过传递参数来告诉WebView具体呈现哪一个网址。

例如在OneDay的WebViewController中:

override func viewDidLoad() {
 super.viewDidLoad()

 // Do any additional setup after loading the view.
 switch webIndex {
 case 0:
  self.urlString = "https://weibo.com/bujidehang"
 case 1:
  self.urlString = "http://www.ohweonline.com/oneday"
 case 2:
  self.urlString = "http://www.ohweonline.com/oneday/updateCN.html"
 case 3:
  self.urlString = "http://www.ohweonline.com/oneday/updateEN.html"
 default:
  self.urlString = "http://www.ohweonline.com/oneday"
 }

 let urlobj = URL(string:self.urlString)
 let request = URLRequest(url:urlobj!)
 webView.loadRequest(request)
 print(webView.isLoading)
}

在设置页面中,我们开始打开Web:

print("to webview")
self.webIndex = 1
self.performSegue(withIdentifier: "viewWebView", sender: self)

将WebIndex传递给WebViewController,以方便判断具体的网址。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
 if segue.identifier == "viewWebView"{
  let dest = segue.destination as! WebViewController
  dest.webIndex = self.webIndex
 }
}

这样就实现了所有相关网址的打开。实际在网页加载页面中还有一些特性和功能,将在下一期文章中详细说明。 打开网址

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • Swift 开发之懒加载的实例详解

    Swift 开发之懒加载的实例详解 /// A display link that keeps calling the `updateFrame` method on every screen refresh. private lazy var displayLink: CADisplayLink = { self.isDisplayLinkInitialized = true let displayLink = CADisplayLink(target: TargetProxy(target:

  • Swift快速集成下拉刷新和上拉加载更多示例代码

    ESPullToRefresh ESPullToRefresh是一个非常易于开发者使用的下拉刷新和加载更多组件.通过一个UIScrollView的扩展,可以轻松为UIScrollView的所有子类添加下拉刷新功能. 如果你想定制组件的UI样式,只要实现指定的协议方法即可.Github地址 如何安装 使用CocoaPods pod "ESPullToRefresh" 手动安装 git clone https://github.com/eggswift/pull-to-refresh.gi

  • Swift如何为网页承载页面添加更多功能详解

    前言 接上一篇文章,我们在设置中心通常会跳转到某一个网页承载页面,而通常我们会添加一些功能来提升他的体验. 1.添加菊花加载的效果 2.添加跳转到Safari的功能 3.添加复制链接的功能 4.添加分享网页的功能 首先,以WebViewController为例,我们要创建一个UIWebView:然后创建了三个功能按钮在左侧.一个关闭页面的按钮在右侧,并且为他们分别绑定:加载按钮的显示和隐藏直接通过代码实现.头部状态的代码如下: class WebViewController: UIViewCon

  • swift版webview加载网页进度条效果

    本文实例为大家分享了swift版webview加载网页展示的具体代码,供大家参考,具体内容如下 比较简单,直接上代码 import UIKit import WebKit import SnapKit class CMWebVC: UIViewController , WKNavigationDelegate { var webUrl: String? var webView: WKWebView =WKWebView() var progressView:UIProgressView = UI

  • Swift如何为设置中心添加常用功能

    前言 在我们开发所有的应用中,通常会提供包含多项功能的设置中心.这些功能可以包括,给用户推荐自己的其他作品.邀请用户好评.提供反馈通道.邀请用户分享应用.打开官网或某些其他地址. 这些功能虽然用户使用频率不高,但对于应用的设置中心是必备的. 1.跳转到AppStore,邀请好评或推荐其他应用 2.提供系统邮件反馈通道 3.调取系统分享功能分享应用 4.在应用内打开网页,实现官方网址.应用更新说明或打开其他网址 通常设置中心由TableView或CollectionView创建,在didSelec

  • 为T-SQL添加intellisense功能

    SQL Server Management Studio中为MDX.DMX 和XML 代码编辑器添加了intellisense功能,却没有给最常用的T-SQL编辑器添加intellisense功能,不知道M$是怎么想的.不过不要紧,今天我给大家推荐一款插件--SqlAssist,它能够为SQL Server Management Studio.Visual Studio.net 2003和Visual Studio 2005添加T-SQL intellisense功能.该插件的价格为$29,可以

  • Android中Activity常用功能设置小结(包括全屏、横竖屏等)

    本文实例讲述了Android中Activity常用功能设置小结(包括全屏.横竖屏等).分享给大家供大家参考,具体如下: Activity全屏设置 方式1:AndroidManifest.xml 复制代码 代码如下: <activity android:name="myAcitivty"  android:theme="@android:style/Theme.NoTitleBar.Fullscreen" /> 方式2:代码实现 复制代码 代码如下: re

  • 很全面的JavaScript常用功能汇总集合

    本文主要总结了JavaScript 常用功能总结,如一些常用的额JS 对象,基本数据结构,功能函数等,还有一些常用的设计模式.  目录: 众所周知,JavaScript是动态的面向对象的编程语言,能够实现以下效果: 丰富Web 网页功能 丰富Web界面 实现本地或远程存储. 实现分布式网络应用的前端组件,并在后台进行数据存储管理. 使用JavaScript可以实现完整的分布式Web 应用.  一.JavaScript 中的数据类型 JavaScript 提供三种元数据类型,string,numb

  • 从零开始学习jQuery (十) jQueryUI常用功能实战

    一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案,  即使你会使用jQuery也能在阅读中发现些许秘籍. 本文是实战篇. 使用jQueryUI完成制作网站的大部分常用功能. 二.前言 经过公司内部收集, 整理了一些经常使用javascript实现的功能.  实现这些功能的主角不是让人眼花缭乱的jQuery插件,  而是jQuery UI. 如果你还在为了一个小小的特效而去下载并安装插件, 发现Bug还没有人替你解决. 记住插件是我们没有办法的最后选择

  • Yii2框架实现登陆添加验证码功能示例

    本文实例讲述了Yii2框架实现登陆添加验证码功能.分享给大家供大家参考,具体如下: models中 LoginForm.php public $verifyCode; public function rules() { return [ -- ['verifyCode', 'captcha', 'on' => 'login'], //验证码 ]; } public function scenarios() { $scenarios = parent::scenarios(); $scenario

  • 详解linux系统输入输出管理和vim的常用功能

    ####系统中输入输出的管理#### 1.理解系统的输入输出重定向 输入重定向是指把文件导入到命令中,而输出重定向则是把原本要输出到屏幕的数据信息写入到指定文件中. 2.管理输入输出的符号 ##输出重定向 >       ##重定向正确输    2>       ##重定向错误输出    &>       ##重定向所有输出 注意: 重定向会覆盖原文件内容 >>     ##不会覆盖原文件内容    2>>     ##错误输出,不覆盖    &&

  • python轻量级orm框架 peewee常用功能速查详情

    目录 一.常见orm数据库框架 1.peewee 简单demo 二.Model 和 Field 关系 三.Model 模型 四.Filed 字段 1.字段初始化参数 2.字段特有参数 3.字段默认参数 4.索引 五.基本操作 增删改查 1.创建 2.删除 3.更新 4.查询 5.事务 6.过滤 7.记录分类 8.计数 9.分页 六.聚合查询 七.Scalar 八.窗口 九.复杂筛选 1.查询中支持的筛选运算符 2.筛选方法 3.联合查询逻辑操作 十.SQL 方法 1.SQL helper 2.安

  • 在springboot中添加mvc功能的正确姿势讲解

    springboot 添加mvc功能 先放出来几个类(包含注解或接口)来观摩一下 WebMvcConfigurer @EnableWebMvc WebMvcConfigurerAdapter(已过时,不再详述,可以理解为继承该类有和实现WebMvcConfigurer一样的效果) WebMvcConfigurationSupport WebApplicationInitializer 这里只聊springboot或者无web.xml环境的情况,无论如何得看一下这个祖宗,以下代码来源于spring

随机推荐