Swift/iOS - 今日Widget

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


Swift/iOS - 今日Widget_第1张图片
屏幕快照 2017-01-05 下午1.43.07.png
Swift/iOS - 今日Widget_第2张图片
屏幕快照 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中添加注册

Swift/iOS - 今日Widget_第3张图片
屏幕快照 2017-01-05 下午2.18.05.png

后面的自定义
UserInfoVC使我们下面要使用的跳转到相应的ViewController
1、先通过主程序更新扩展的数据
首先在你的主程序和你的扩展中添加共同的Group
Swift/iOS - 今日Widget_第4张图片
屏幕快照 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发发发发发发发发发发发发

你可能感兴趣的:(Swift/iOS - 今日Widget)