在iOS 8中,当开发自定义键盘并在info.plist中将RequestsOpenAccess属性设置为YES时,在设置 - >添加新键盘上有一个名为"允许完全访问"的切换按钮.自定义键盘代码如何知道用户启用或禁用此切换?
Jul*_*lon 33
更新08/23/2017 iOS 10兼容性:
func isOpenAccessGranted() -> Bool{
UIPasteboard.general.string = "CHECK"
return UIPasteboard.general.hasStrings
}
Run Code Online (Sandbox Code Playgroud)
iOS 8:
-(BOOL)isOpenAccessGranted{
return [UIPasteboard generalPasteboard];
}
Run Code Online (Sandbox Code Playgroud)
请注意,模拟器将始终告诉您具有完全访问权限,因此要使其正常工作,您需要从设备运行它.
fis*_*ch2 15
这是迄今为止最简单的答案,不需要您设置应用程序组.它在应用商店中进行了生产测试.
+ (BOOL)isOpenAccessGranted
{
return [UIPasteboard generalPasteboard];
}
Run Code Online (Sandbox Code Playgroud)
sch*_*erz 11
对于iOS 10(Beta 5),他们更改了UIPasteboard API,但我发现以下工作:
let originalString = UIPasteboard.general.string
UIPasteboard.general.string = "TEST"
if UIPasteboard.general.hasStrings
{
UIPasteboard.general.string = originalString
hasFullAccess = true
}
else
{
hasFullAccess = false
}
Run Code Online (Sandbox Code Playgroud)
我今天在iOS 10中一直在测试它,并且访问粘贴板似乎不够.在iOS 10中,您可以将粘贴板设置为var而无需完全访问权限.这是我提出的解决方案......
func checkFullAccess() -> Bool
{
var hasFullAccess = false
if #available(iOSApplicationExtension 10.0, *) {
let pasty = UIPasteboard.general
if pasty.hasURLs || pasty.hasColors || pasty.hasStrings || pasty.hasImages {
hasFullAccess = true
} else {
pasty.string = "TEST"
if pasty.hasStrings {
hasFullAccess = true
pasty.string = ""
}
}
} else {
// Fallback on earlier versions
var clippy : UIPasteboard?
clippy = UIPasteboard.general
if clippy != nil {
hasFullAccess = true
}
}
return hasFullAccess
}
Run Code Online (Sandbox Code Playgroud)
测试以查看粘贴板是否具有某些内容,即使在粘贴板上有内容,也会关闭完全访问权限返回false.当然它实际上可能是空的,所以在所有这些测试之后你可以安全地尝试在粘贴板上设置一些东西而不用担心替换已经存在的东西.如果您确实有访问权并且粘贴板有内容,那么测试将返回true,如果您没有访问权限,则无法覆盖那里的内容.
HTH,迈克
更新:无需像其他人提到的那样启用应用组,只需检查对粘贴板的访问:
- (BOOL)isFullAccessGranted
{
return !![UIPasteboard generalPasteboard];
}
Run Code Online (Sandbox Code Playgroud)
注意:即使您启用了应用程序组,以下内容也不再有效...
对于启用了应用程序组的自定义键盘,以下是测试"允许完全访问"开关状态的快速,可靠的方法:
func isOpenAccessGranted() -> Bool {
let fm = NSFileManager.defaultManager()
let containerPath = fm.containerURLForSecurityApplicationGroupIdentifier(
"group.com.example")?.path
var error: NSError?
fm.contentsOfDirectoryAtPath(containerPath!, error: &error)
if (error != nil) {
NSLog("Full Access: Off")
return false
}
NSLog("Full Access: On");
return true
}
Run Code Online (Sandbox Code Playgroud)
对于使用Swift 2.3的iOS 10(如果您不想将文件转换为Swift 3.0)
func isOpenAccessGranted() -> Bool {
if #available(iOSApplicationExtension 10.0, *) {
let originalString = UIPasteboard.generalPasteboard().string
UIPasteboard.generalPasteboard().string = "Test"
if UIPasteboard.generalPasteboard().hasStrings {
UIPasteboard.generalPasteboard().string = originalString
return true
} else {
return false
}
} else {
return UIPasteboard.generalPasteboard().isKindOfClass(UIPasteboard)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13042 次 |
| 最近记录: |