美文网首页iOS开发知识小集iOS开发技巧Swift语法
【iOS开发】自动识别剪贴板内容

【iOS开发】自动识别剪贴板内容

作者: KyXu | 来源:发表于2015-08-20 09:20 被阅读7862次

    之前用淘宝给微信好友分享链接的时候,发现在微信中复制了宝贝的链接,然后再从后台切换到淘宝客户端,淘宝就会弹出一个页面,询问是否要跳转到相关页面,今天试着实现了一下,分享出来~

        //识别剪贴板中的内容
        if let paste = UIPasteboard.generalPasteboard().string where
            (paste.hasPrefix("http://") || paste.hasPrefix("https://")) { 
            //如果剪贴板中的内容是链接
            let alert = UIAlertController(title: "要打开剪贴板中的链接吗?",
                message: nil,
                preferredStyle: UIAlertControllerStyle.Alert)
            alert.addAction(UIAlertAction(title: "打开",
                style: UIAlertActionStyle.Default,
                handler: { Void in
                    // your implementation
                    print(paste)
            }))
            alert.addAction(UIAlertAction(title: "忽略",
                style: UIAlertActionStyle.Cancel,
                handler: nil))
            //弹出Alert
            let storyboard = UIStoryboard(name: "Main", bundle: nil)
            if let vc = storyboard.instantiateViewControllerWithIdentifier("navi") as? UINavigationController {
                self.window?.rootViewController = vc
                vc.presentViewController(alert, animated: true, completion: nil)
            }
        }
    

    获取设备的剪贴板很简单,第一行代码就搞定了,if 语句中判断了一下剪贴板中的内容是不是链接,注意http和https都要写上,这点很容易被忽略(在浏览器地址栏中复制以www.开头的文本会自动在剪贴板中转为http或https开头的链接)。

    更值得注意的是,因为你需要让 App 在每次从后台进入前台的时候都检测一下剪贴板中有没有链接,所以以上方法要放在 AppDelegate 文件的 applicationWillEnterForeground 方法中。

    AppDelegate.swift

    而这个方法中是不能通过 self 来调用 ViewController 的,所以要曲线救国的话,你需要手动获取 Storyboard、ViewController,再设置window的rootViewController 才能去掉所有报错和警告。

    (这里我只是把剪贴板中的链接输出到控制台了,想要自己用 UIWebView 打开链接的话,在// your implementation 这句注释这里写自己的方法吧)


    【150928 更新】

    对比 applicationWillEnterForeground
    applicationDidBecomeActive
    这两个方法,前者是指 App从后台进入前台,后者是指 App处于活跃状态,所以前者相对于后者,缺少的部分是,当 App 刚刚启动,而不是从后台取出的时候,它无法识别剪贴板。
    因为你不能要求每次都让用户先把 App 打开,再往剪贴板里面填东西,再跳转回来,所以个人建议把上面的代码放在 applicationDidBecomeActive 方法中,而不是 applicationWillEnterForeground

    相关文章

      网友评论

      • 随行的羊:希望关注 “iOS开发知识小集” 的专题哈,谢谢:smile:
      • TikBai:楼主,剪切板的内容怎么清空,就是第二次进入淘宝时,就不会提示
        TikBai:@Wanderer_Xiang 你讲所获取的剪切板内容为空就可以了 board.string = @"";
        1aec65fdcc5f:我也找这个问题,该怎么识别一次后清空内容。我现在每次进去都会识别。
      • 路边的风景呢:楼主。怎么把粘贴板上的URL拿出来 打印出来的和原来的URL不一样
      • 一个很帅的蓝孩子:哈哈!可以的!之前都不知道UIPasteboard这个东西,现在才发现原来这么简单:+1:
      • 巴图鲁:厉害
      • 清河湾:楼主,我很奇怪,你为什么,不直接监听系统的通知?
        UIApplicationDidBecomeActiveNotification 即将变成活跃状态
        UIApplicationWillResignActiveNotification 即将变成不活跃状态
        这样就不用把它放在 AppDelegate 了,直接放在ViewController中不是更好操作?
        plum8414:先剪切,那时app没启动,你怎么监听通知?
        吃蘑菇De大灰狼:可行的,不过关于这块业务,如果比较多的可以专门抽出一个类来管理,统一放在AppDelegate方法中
      • BlueEagleBoy:大神 谢谢分享
      • PM_Irwin:一直想要这个 但是有没有OC版本的啊
        PM_Irwin:@徐开源 好吧 看来还得搞下swift 。 公司没用,一直懒得看。
        KyXu:@一听情话就哽咽 语法不是问题吧~不过我只写 Swift 哈
      • 焚琴煮鹤de我:棒,一直就想要找到这个!!!
        KyXu:@焚琴煮鹤de我 谢谢鼓励

      本文标题:【iOS开发】自动识别剪贴板内容

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