2016-09-23 92 views
4

我最近升级到Xcode 8并将我的代码转换为Swift 3.我制作的自定义键盘(扩展)在iOS 9之前工作得很好,但我面对一对夫妇在iOS的问题10.在我的应用程序中单击按钮时打开手机设置

  1. 自定义键盘的容器应用程序包含一个按钮,将用户定向到键盘设置添加键盘

问题:单击此按钮不工作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

    代码土司的这种敬酒不弹出:

    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) 
        } 
    } 
    

    我做了计算器检查出一些解决方案,但没有他们为我工作,正如我之前说过的,我的应用程序在除iOS 10以外的所有版本上工作得非常好。 请有人可以帮我吗?

    +0

    http://stackoverflow.com/questions/28152526/how-do-i-open-手机设置,当按钮被点击时 - ios – Rock

    +0

    @Rock正如我上面写的,我已经试过了,我的工作 – PersianBlue

    +0

    @PersianBlue:你有答案,我也面临同样的问题。 – RJ168

    回答

    3

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

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

    我已经试过了。这将应用程序指向手机设置应用程序,但它只有一个白色屏幕,并且在设置选项显示前应用程序关闭 – PersianBlue

    +0

    看起来有些人不会受到崩溃的影响。从更新到iOS 10的那一天起,我面临着同样的崩溃。即使更新到iOS 10.0.2也无法解决问题。 – Mesbah

    +0

    仅供参考,崩溃日志在这里:http://pastebin.com/L9zQ7kmZ。希望有人能够提取实际发生的事情。 – Mesbah

    1

    UIApplicationOpenSettingsURLString提供了一个链接到应用程序的设置。在iOS10之前,如果应用程序缺少settings.Bundle,它将链接到设置主页。日志会显示:

    _BSMachError: (os/kern) invalid capability (20) _BSMachError: (os/kern) invalid name (15)

    如果你的目的是要链接到应用程序的设置,你只需添加一个设置捆绑。 Apple Documentation

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

    +0

    您是否找到了链接手机设置的方法? – richc

    0

    如果您看到像@PersianBlue一样的白色屏幕,您的应用可能缺少自定义设置。 下面介绍一下文件对此有什么看法UIApplicationOpenSettingsURLString

    用于创建可传递到的OpenURL(_ :)方法的URL。当您打开使用此字符串构建的网址时,系统会启动 “设置”应用程序,并显示应用程序的自定义设置(如果有)。

    4

    斯威夫特3 iOS的10

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

    我也试过这个,但它只是将我引导到一个空白屏幕 – PersianBlue

    +0

    它看起来像你忘了在didFinishLaunchingWithOptions请求用户权限。检查它 –

    +0

    我在设置中添加了URL类型,如下所示 - http://stackoverflow.com/a/35542855/6077720。那么在didFinishLaunchingWithOptions中需要什么用户权限 – PersianBlue

    0

    我写了下面的功能,它为我工作。我帮助它会帮助你们。

    func openLocationSettings(){ let scheme:String = UIApplicationOpenSettingsURLString if let url = URL(string: scheme) { if #available(iOS 10, *) { UIApplication.shared.open(url, options: [:], completionHandler: { (success) in print("Open \(scheme): \(success)") }) } else { let success = UIApplication.shared.openURL(url) print("Open \(scheme): \(success)") } } }

    1

    这是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) 
    } 
    
    相关问题