Swift/iOS - 今日Widget

新建工程,然后点击File->New->Target...


屏幕快照 2017-01-05 下午1.43.07.png
屏幕快照 2017-01-05 下午1.43.36.png

点击Today Extension
创建一个Extension,名字你定~~
建立完成之后选中


屏幕快照 2017-01-05 下午1.48.29.png

运行,你就可以看到你创建widget,上面写着Hello world!
哈哈
你可以点击你的xib来修改你的样式。
这里忽略...
接下来就是点击进入APP了
我们在扩展中添加一个button,并且关联按钮事件

@IBAction func action(_ sender: Any)
    {

     // 获取当前的content(上下文)open->url
     self.extensionContext?.open(NSURL.init(string:"iOSWidget://page=UserInfoVC") as! URL,
                                    completionHandler: { (finish) in
            //可以做相应的操作
        })
    }

"iOSWidget://page=UserInfoVC":解释
iOSWidget这需要你在你的主程序中plist中添加注册

屏幕快照 2017-01-05 下午2.18.05.png

后面的自定义
UserInfoVC使我们下面要使用的跳转到相应的ViewController
1、先通过主程序更新扩展的数据
首先在你的主程序和你的扩展中添加共同的Group
屏幕快照 2017-01-05 下午2.41.46.png

我们在主程序中添加按钮,并关联按钮事件

@IBAction func setData(_ sender: Any) {
        //这里简单的传递一个字符串,让扩展的label更新
        let defaults = UserDefaults(suiteName: "group.com.MAO.CutImage")
        defaults?.setValue("更新了数据", forKey: "update")
    }

在扩展中

// 这是系统的方法
func widgetPerformUpdate(completionHandler: (@escaping (NCUpdateResult) -> Void))
{
     //注:官方提示!!!
     // Perform any setup necessary in order to update the view.
     // If an error is encountered, use NCUpdateResult.Failed
     // If there's no update required, use NCUpdateResult.NoData
     // If there's an update, use NCUpdateResult.NewData
     let defaults = UserDefaults(suiteName: "group.com.MAO.CutImage")
     if let updateString = defaults?.value(forKey: "update") as? String
     {
         label.text = updateString
     }
     completionHandler(NCUpdateResult.newData)
}

我们点击主程序的按钮会触发事件,然后退出看扩展的程序,会发现数据变了。嘿嘿。。。
2、点击扩展进入APP进行相应的事件
当我们点击在扩展中的进入APP按钮之后
我们会在AppDelegate中捕捉到相应的open

func application(_ application: UIApplication, handleOpen url: URL) -> Bool
    {
        let prefix:String = "iOSWidget://page="
        if (url.absoluteString.range(of: prefix) != nil) {
            let page = url.absoluteString.substring(from: prefix.endIndex)
            // 这里可以根据这个字符串做相应的操作
            print(page)
        }
        return true
    }

扩展阅读: iOS8 扩展
今天是腊八节,祝大家8888888888888888888发发发发发发发发发发发发

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 67,184评论 12 114
  • Swift版本点击这里欢迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh阅读 14,661评论 7 217
  • 从记事起,这节日过得不太完美,不像它寓意般美好团圆。可它又是如此地热闹,以至于让人记不得它的坏,让游荡的人...
    明厌阅读 22评论 0 0
  • 我以为我变了,好像变得果敢,勤勉一些,或者应该是更阳光更懂得生活一些,是多了些从容,多了一些思考,多了一些...
    柒Iris阅读 19评论 0 0
  • 瓷砖板因其强硬度、低成本等特点,在UV打印行业被广泛应用,由于大多数硬度高一点的板材都要上瓷砖背景墙涂层液,我们东...
    Meigui_4ea6阅读 41评论 0 0