Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift3 在“我的应用”中单击按钮时打开手机设置_Swift3_Ios10_Emoji_Custom Keyboard - Fatal编程技术网

Swift3 在“我的应用”中单击按钮时打开手机设置

Swift3 在“我的应用”中单击按钮时打开手机设置,swift3,ios10,emoji,custom-keyboard,Swift3,Ios10,Emoji,Custom Keyboard,我最近升级到Xcode 8,并将代码转换为Swift 3。我正在制作一个自定义键盘(扩展),它在iOS 9之前工作得非常好,但在iOS 10中我面临着几个问题 自定义键盘的容器应用程序包含一个按钮,可将用户引导到键盘设置以添加键盘 问题:此按钮单击在iOS 10中不起作用,即用户未被定向到设置。我已在项目中配置了URL方案,并尝试了以下代码: @IBAction func btnGetStarted(_ sender: AnyObject) { let settingsUrl = UR

我最近升级到Xcode 8,并将代码转换为Swift 3。我正在制作一个自定义键盘(扩展),它在iOS 9之前工作得非常好,但在iOS 10中我面临着几个问题

  • 自定义键盘的容器应用程序包含一个按钮,可将用户引导到键盘设置以添加键盘
  • 问题:此按钮单击在iOS 10中不起作用,即用户未被定向到设置。我已在项目中配置了URL方案,并尝试了以下代码:

    @IBAction func btnGetStarted(_ sender: AnyObject) {
    
        let settingsUrl = URL(string: UIApplicationOpenSettingsURLString)
        if let url = settingsUrl {
            UIApplication.shared.openURL(url)
        }
    }
    
    还尝试:

    @IBAction func btnGetStarted(_ sender: AnyObject) {
    
    if let settingsURL = URL(string:"prefs:root=General&path=Keyboard/KEYBOARDS") {
     UIApplication.shared.openURL(settingsURL)
     }
    }
    
  • 自定义键盘还包含表情符号图像。用户需要在设置中启用“允许访问”才能使用表情符号图像。如果用户未启用“允许访问”,则无法使用表情符号图像。如果“允许访问”未启用,并且用户尝试单击表情符号,则会弹出一个祝酒词,告知用户转到设置并启用“允许访问” 问题:当应用程序在iOS 10中运行时,此toast不会弹出

    let settingsUrl = NSURL(string:UIApplicationOpenSettingsURLString) as! URL
    UIApplication.shared.open(settingsUrl, options: [:], completionHandler: nil)
    
    祝酒词:

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath){
    
        let pbWrapped: UIPasteboard? = UIPasteboard.general
    
        if let pb = pbWrapped {
            if  currentKeyboard == XXXXXX.emoji {
                if let data = UIImagePNGRepresentation(dataEmoji[(indexPath as NSIndexPath).row]) {
                    pb.setData(data, forPasteboardType: "public.png")
    
                      self.makeToast(pasteMessage, duration: 3.0, position: .center)
                }
            }
    
        } else {
            var style = ToastStyle()
            style.messageColor = UIColor.red
            style.messageAlignment = .center
            //style.backgroundColor = UIColor.whiteColor()
    
            self.makeToast("To really enjoy the keyboard, please Allow Full Access in the settings application.", duration: 8.0, position: .center, title: nil, image: UIImage(named: "toast.png"), style: style, completion: nil)
        }
    }
    
    我确实在stackoverflow上查看了一些解决方案,但没有一个对我有效,正如我之前所说,我的应用程序在除iOS 10之外的所有版本上都运行良好。
    有人能帮我吗?

    @persianBlue:这是在Xcode8+iOS10上工作

    UIApplication.shared.openURL(URL(string:UIApplicationOpenSettingsURLString)!)
    

    ui应用程序开放设置surlstring
    提供指向应用程序设置的链接。在iOS10之前,如果应用程序缺少settings.Bundle,它将链接到settings主页。日志将显示:

    
    _BSMachError:(操作系统/内核)无效功能(20)
    _BSMachError:(os/kern)名称无效(15)
    

    如果您想链接到应用程序的设置,只需添加一个设置包即可


    我还没有找到链接到手机设置主页的方法。

    如果你看到像@PersianBlue一样的白色屏幕,你的应用程序可能缺少自定义设置。 以下是有关
    UIApplicationOpenSettingsURLString
    的文档说明:

    用于创建可传递给openURL(:)方法的URL。什么时候 打开根据此字符串构建的URL,系统将启动 设置应用程序并显示应用程序的自定义设置(如果有)


    Swift 3 iOS 10

    let settingsUrl = NSURL(string:UIApplicationOpenSettingsURLString) as! URL
    UIApplication.shared.open(settingsUrl, options: [:], completionHandler: nil)
    

    我写了下面的函数,它对我有用。我会帮你们的

    func openLocationSettings(){
    let scheme:String=ui应用程序开放设置surlstring
    如果let url=url(字符串:scheme){
    如果可用(iOS 10,*){
    UIApplication.shared.open(url,选项:[:],
    completionHandler:{
    (成功)在
    打印(“打开\(方案):\(成功)”)
    })
    }否则{
    让success=UIApplication.shared.openURL(url)
    打印(“打开\(方案):\(成功)”)
    }
    }
    
    }

    这在iOS11中不再可能,我们可以打开如下设置:

    if let url = URL(string:UIApplicationOpenSettingsURLString), UIApplication.shared.canOpenURL(url) {
       //iOS 10 +
       UIApplication.shared.open(url, options: [:], completionHandler:{ didOpen in
          print("Opened \(didOpen)") 
       })
       //iOS 9 +
       UIApplication.shared.open(url)
    }
    

    @正如我在上面写的,我已经试过了,力的作用me@PersianBlue:你知道答案了吗,我也面临着同样的问题。@Raj_216不,我还没有找到解决方案。@PersianBlue:好的,我会在得到解决方案后发布它&如果你在我之前找到了,请也这样做。我已经试过了。这会将应用程序定向到手机设置应用程序,但它只是一个白色屏幕,在显示设置选项之前,应用程序会关闭,就像有些人不会受到崩溃的影响一样。从我升级到iOS 10那天起,我就面临着同样的崩溃。即使更新到iOS 10.0.2也无法解决此问题。此处的崩溃日志仅供参考:。希望有人能够提取实际发生的事情。openURL(url:url)在Swift 3中被弃用。你需要使用open(url:,options,completionHandler:)@PeterJohnson它在iOS 10中被弃用了,但是如果你的目标是iOS 10以外的任何东西,你需要继续使用
    openUrl
    我也尝试过这个,但它只是将我引导到一个空白屏幕。看起来你忘记了在didFinishLaunchingWithOptions中请求用户权限。检查itI在设置中添加的URL类型如下-。那么,在DidFinishLaunchingWithOptions中需要用户权限吗?因为它是swift 3,我认为您应该执行
    URL(string:UIApplicationOpenSettingsURLString)
    而不是NSURL->URL case您找到链接手机设置的方法了吗?