从另一个应用程序以编程方式在 iOS 的设置应用程序中打开键盘的设置屏幕
Open Keyboard's settings screen in iOS's settings app programmatically from another app
我们如何以编程方式直接转到 iOS 设置应用程序的下面提到的任何屏幕
更新
正如其他用户指出的那样,此解决方案不再适用于 iOS10。如果有人知道如何让它在 iOS10 中工作,请告诉我们。
iOS < 10 的解决方案:
要打开(您自己的应用程序的)设置,您可以使用 UIApplicationOpenSettingsURLString
常量:
if let settingsURL = NSURL(string: UIApplicationOpenSettingsURLString) {
UIApplication.sharedApplication().openURL(settingsURL)
}
这是在 iOS 8 中引入的,因此您可以在 运行 iOS8 或更高版本的设备上使用它。但这只会打开您自己的应用程序的设置。不是键盘设置。如果您的应用程序没有自己的设置,它只会在其主页上打开“设置”应用程序。
在过去(iOS 5.1 之前),您可以打开设置 URL 并直接转到“设置”应用中的几乎所有子页面。 Apple 在 iOS 5.1 中删除了此功能。
但是它似乎在 iOS 8 和 9 中再次工作。Apple 没有正式记录它,但它似乎工作,虽然我不确定这有多可靠。它适用于我的 iOS 9.1 iPhone 但不适用于模拟器。
所以,谨慎起见,您可以试试这个来打开键盘设置:
if let settingsURL = NSURL(string: "prefs:root=General&path=Keyboard") {
UIApplication.sharedApplication().openURL(settingsURL)
}
或更深入:
if let settingsURL = NSURL(string: "prefs:root=General&path=Keyboard/KEYBOARDS") {
UIApplication.sharedApplication().openURL(settingsURL)
}
编辑:
正如 iHulk 在评论中提到的那样,您可能必须将 prefs
添加到项目 Info.plist 文件中的 URL 方案才能使这项工作正常进行。
我从 Apple 评论者那里得到的最新消息:
您的应用程序托管了扩展程序,但它不符合应用程序扩展程序编程指南。
具体来说,您的应用会将用户直接带到键盘设置页面,而不是将用户带到您应用的特定设置页面。请确保您的应用只会将用户带到您的应用设置页面。
当我重定向到:prefs:root=General&path=Keyboard/KEYBOARDS
从 iOS 开始,应使用 10 "App-Prefs:root" 而不是 "prefs:root"。请参阅下面的 Objective C 代码。对此进行了测试,代码工作正常,但 Apple 可能会因此拒绝该应用程序。
注意:正如所指出的,这仅适用于 ios 10
NSString *settingsUrl= @"App-Prefs:root=General&path=Keyboard";
if ([[UIApplication sharedApplication] respondsToSelector:@selector(openURL:options:completionHandler:)]) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:settingsUrl] options:@{} completionHandler:^(BOOL success) {
NSLog(@"URL opened");
}];
}
我们如何以编程方式直接转到 iOS 设置应用程序的下面提到的任何屏幕
更新
正如其他用户指出的那样,此解决方案不再适用于 iOS10。如果有人知道如何让它在 iOS10 中工作,请告诉我们。
iOS < 10 的解决方案:
要打开(您自己的应用程序的)设置,您可以使用 UIApplicationOpenSettingsURLString
常量:
if let settingsURL = NSURL(string: UIApplicationOpenSettingsURLString) {
UIApplication.sharedApplication().openURL(settingsURL)
}
这是在 iOS 8 中引入的,因此您可以在 运行 iOS8 或更高版本的设备上使用它。但这只会打开您自己的应用程序的设置。不是键盘设置。如果您的应用程序没有自己的设置,它只会在其主页上打开“设置”应用程序。
在过去(iOS 5.1 之前),您可以打开设置 URL 并直接转到“设置”应用中的几乎所有子页面。 Apple 在 iOS 5.1 中删除了此功能。
但是它似乎在 iOS 8 和 9 中再次工作。Apple 没有正式记录它,但它似乎工作,虽然我不确定这有多可靠。它适用于我的 iOS 9.1 iPhone 但不适用于模拟器。
所以,谨慎起见,您可以试试这个来打开键盘设置:
if let settingsURL = NSURL(string: "prefs:root=General&path=Keyboard") {
UIApplication.sharedApplication().openURL(settingsURL)
}
或更深入:
if let settingsURL = NSURL(string: "prefs:root=General&path=Keyboard/KEYBOARDS") {
UIApplication.sharedApplication().openURL(settingsURL)
}
编辑:
正如 iHulk 在评论中提到的那样,您可能必须将 prefs
添加到项目 Info.plist 文件中的 URL 方案才能使这项工作正常进行。
我从 Apple 评论者那里得到的最新消息: 您的应用程序托管了扩展程序,但它不符合应用程序扩展程序编程指南。
具体来说,您的应用会将用户直接带到键盘设置页面,而不是将用户带到您应用的特定设置页面。请确保您的应用只会将用户带到您的应用设置页面。
当我重定向到:prefs:root=General&path=Keyboard/KEYBOARDS
从 iOS 开始,应使用 10 "App-Prefs:root" 而不是 "prefs:root"。请参阅下面的 Objective C 代码。对此进行了测试,代码工作正常,但 Apple 可能会因此拒绝该应用程序。
注意:正如所指出的,这仅适用于 ios 10
NSString *settingsUrl= @"App-Prefs:root=General&path=Keyboard";
if ([[UIApplication sharedApplication] respondsToSelector:@selector(openURL:options:completionHandler:)]) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:settingsUrl] options:@{} completionHandler:^(BOOL success) {
NSLog(@"URL opened");
}];
}