我最近升级到Xcode 8并将我的代码转换为Swift 3.我正在制作一个自定义键盘(扩展程序),它在iOS 9中运行得非常好,但我在iOS 10中遇到了一些问题。
问题:此按钮单击在iOS 10中不起作用,但用户未定向到设置。我已在项目中配置了URL Schemes,并尝试了以下代码:
@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)
}
}
我确实在stackoverflow上查看了一些解决方案,但它们都没有为我工作,正如我之前说的,我的应用程序在除iOS 10之外的所有版本上都能正常运行。 请有人帮帮我吗?
答案 0 :(得分:5)
Swift 3 iOS 10
let settingsUrl = NSURL(string:UIApplicationOpenSettingsURLString) as! URL
UIApplication.shared.open(settingsUrl, options: [:], completionHandler: nil)
答案 1 :(得分:3)
@persianBlue:这适用于Xcode8 + iOS10。
UIApplication.shared.openURL(URL(string:UIApplicationOpenSettingsURLString)!)
答案 2 :(得分:1)
UIApplicationOpenSettingsURLString
提供了应用设置的链接。在iOS10之前,如果应用程序缺少settings.Bundle,它将链接到设置主页。日志会显示:
_BSMachError: (os/kern) invalid capability (20)
_BSMachError: (os/kern) invalid name (15)
如果您打算链接到应用的设置,则只需添加设置包即可。 Apple Documentation
我还没有找到一种链接到手机设置主页的方法。
答案 3 :(得分: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)
}
答案 4 :(得分:0)
如果您看到像@PersianBlue这样的白色屏幕,您的应用可能会缺少自定义设置。
以下是关于UIApplicationOpenSettingsURLString
的文档说明:
用于创建可以传递给openURL(_ :)方法的URL。什么时候 你打开从这个字符串构建的URL,系统启动 设置应用并显示应用的自定义设置(如果有)。
答案 5 :(得分: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)")
}
}
}