美文网首页
Swift/iOS - 今日Widget

Swift/iOS - 今日Widget

作者: 燃烧的大叔 | 来源:发表于2017-01-05 15:45 被阅读192次

    新建工程,然后点击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发发发发发发发发发发发发

    相关文章

      网友评论

          本文标题:Swift/iOS - 今日Widget

          本文链接:https://www.haomeiwen.com/subject/lylzvttx.html