Skip to content

Instantly share code, notes, and snippets.

@Zkuns
Last active July 27, 2016 11:26
Show Gist options
  • Save Zkuns/38a20ee63d4dd507f33a3363c217e302 to your computer and use it in GitHub Desktop.
Save Zkuns/38a20ee63d4dd507f33a3363c217e302 to your computer and use it in GitHub Desktop.

#给app添加3DTouch,quickAction quickAction即重按app的启动按钮,弹出的快捷启动方式 通常分为两种, Static QuickAction和 Dynamic QuickAction,一般都只会用到Static QuickAction。 区别:

  • Static是写在info.list中,Dynamic是过代码动态生成的。
  • 因为Dynamic是代码动态生成的,所以app运行前是没有Dynamic QuickAction的。
  • Static的优先级是高于Dynamic的,而且QuickAction数量限制是4个,所以你如果添加了三个Static QuickAction,那就只能添加一个�Dynamic QuickAction。

##如何添加静态的quickAction 打开info.list编辑成如下。

源码为

<key>UIApplicationShortcutItems</key>
	<array>
		<dict>
			<key>UIApplicationShortcutItemIconFile</key>
			<string>search-icon</string>
			<key>UIApplicationShortcutItemType</key>
			<string>Search</string>
			<key>UIApplicationShortcutItemTitle</key>
			<string>查找</string>
			<key>UIApplicationShortcutItemSubtitle</key>
			<string></string>
			<key>UIApplicationShortcutItemUserInfo</key>
			<dict/>
		</dict>
		<dict>
			<key>UIApplicationShortcutItemIconType</key>
			<string>UIApplicationShortcutIconTypeAdd</string>
			<key>UIApplicationShortcutItemSubtitle</key>
			<string></string>
			<key>UIApplicationShortcutItemTitle</key>
			<string>添加</string>
			<key>UIApplicationShortcutItemType</key>
			<string>New</string>
			<key>UIApplicationShortcutItemUserInfo</key>
			<dict>
				<key>password</key>
				<string>123456</string>
				<key>username</key>
				<string>username</string>
			</dict>
		</dict>
	</array>

安装测试,即可看到如图的效果,注意我这里用了一张search-icon的图片,你本地要是没有就会导致查找的icon为空

下面对这些选项做一下介绍

  1. UIApplicationShortcutItemIconType: 非必需选项,使用系统自带的icon,比如如:UIApplicationShortcutIconTypeSearch,UIApplicationShortcutIconTypeAdd
  2. UIApplicationShortcutItemIconFile: 非必需选项,使用自定义的icon,值为Images.xcassets中的图片文件名
  3. UIApplicationShortcutItemTitle: 必填,这个不用多说,即为标题
  4. UIApplicationShortcutItemSubtitle: 非必需选项,副标题
  5. UIApplicationShortcutItemType: 必填,用于区分不同的action,进入app后,根据它做不同的操作
  6. UIApplicationShortcutItemUserInfo: 非必需选项,用来加入传入的参数,

处理QuickAction

在AppDelegate中有一代理方法

func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) {
    //这里即为处理action的地点
    //完成后调用completionHandler方法,我这里自定义一个handleAction方法,返回值为是否处理成功。
    completionHandler(hanleAction(shortcutItem))
  }

通过定义一个enum非常简单的实现handleAction方法

enum ShortCut: String{
  case New, Search
}
private func handleAction(shortcutItem: UIApplicationShortcutItem) -> Bool{
    var result = false
    let type = shortcutItem.type
    if let shortCut = ShortCut.init(rawValue: type){
      switch shortCut{
      case .New:
        print("call new")
        result = true
      case .Search:
        print("call search")
        result = true
      }
    }
    return result
  }

除了这种处理方式,还可以这样通过application(didFinishLaunchingWithOptions:)做处理 但是这种方式只会在第一次启动时执行,而且当两种方式同时存在的时候就会和上面的处理方式重复,因为这一种处理方式会在上一种之前执行,所以当你在这里处理完quickAction后return false,这样就不会重复第一种执行方式了。

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    if let shortcutItem = launchOptions?[UIApplicationLaunchOptionsShortcutItemKey] as? UIApplicationShortcutItem {
      handleAction(shortcutItem)
      return false
    }
    return true
}

##添加动态的quickAction 添加Dynamic quickAction特别简单,代码几行就可以完成了

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    let shortCutItem1 = UIApplicationShortcutItem(type: "test3", localizedTitle: "dynamic 1", localizedSubtitle: "", icon: UIApplicationShortcutIcon(templateImageName: "qr"), userInfo: nil)
    let shortCutItem2 = UIApplicationShortcutItem(type: "test4", localizedTitle: "dynamic 2", localizedSubtitle: "", icon: UIApplicationShortcutIcon(templateImageName: "qr"), userInfo: nil)
    application.shortcutItems = [shortCutItem1, shortCutItem2]
    return true
  }

参数和static一样,效果图如下:

看添加3Dtouch的quickAction还是挺简单的。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment