Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.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
Iphone accessibilityLabel和accessibilityHint属性是';不要总是从NIB加载_Iphone_Accessibility - Fatal编程技术网

Iphone accessibilityLabel和accessibilityHint属性是';不要总是从NIB加载

Iphone accessibilityLabel和accessibilityHint属性是';不要总是从NIB加载,iphone,accessibility,Iphone,Accessibility,我的iPhone应用程序的UI有很多静态标签,我在Interface Builder中为它们设置了可访问性提示。我希望以编程方式访问这些内容,以便提供帮助气泡-UILabel的自定义子类识别触摸并显示一个值为[self-accessibilityHint]的气泡 但是,[self-accessibilityHint]返回nil。如果以编程方式设置值[self-setAccessibilityHint:@“Hello”],则可以从程序访问该值,但NIB的初始值不可用 如果在启动应用程序之前打开可访

我的iPhone应用程序的UI有很多静态标签,我在Interface Builder中为它们设置了可访问性提示。我希望以编程方式访问这些内容,以便提供帮助气泡-UILabel的自定义子类识别触摸并显示一个值为[self-accessibilityHint]的气泡

但是,[self-accessibilityHint]返回nil。如果以编程方式设置值[self-setAccessibilityHint:@“Hello”],则可以从程序访问该值,但NIB的初始值不可用

如果在启动应用程序之前打开可访问性检查器,则可以通过accessibilityHint属性获得来自NIB文件的提示。是否有某个标志确定系统是否加载这些属性;如果有,我有什么办法可以设置它吗


我的备份选项是让我的控制器保留对每个UI标签的引用,并在代码中设置accessibilityHint,但这非常难看和麻烦。

Hmm,如果我打开Library/Preferences/com.apple.Accessibility.plist并将ApplicationAccessibilityEnabled从false更改为true,它就会工作。(该路径位于~/Library/Application Support/iPhone Simulator/)

我尝试在main()的开头添加此内容:

但它不起作用。(它将一个文件写入Applications/{UUID}/Library/Preferences/com.apple.Accessibility.plist)

编辑:单步执行UIKit代码后,将调用确定是否打开或关闭辅助功能

CFPreferencesGetBooleanValue(@"ApplicationAccessibilityEnabled", @"/Users/sam/Library/Application Support/iPhone Simulator/User/Library/Preferences/com.apple.Accessibility", NULL);
请注意这个奇怪的应用程序键,我还不确定这个值来自哪里(我对386汇编的知识非常薄弱!),但我可以将这个键传递给CFPreferencesSetAppValue,它可以工作,至少在模拟器上可以工作(我目前没有访问实际设备的权限)


此外,这将为所有应用程序打开应用程序可访问性(因为它会将其写入全局plist)。如果应用程序启动后该值应设置回false,我可以从main()设置一个标志。

这适用于模拟器和设备。取自

#导入
NSAutoreleasePool*autoreleasePool=[[NSAutoreleasePool alloc]init];
NSString*appSupportLocation=@“/System/Library/PrivateFrameworks/AppSupport.framework/AppSupport”;
NSDictionary*环境=[[NSProcessInfo processInfo]环境];
NSString*simulatorRoot=[environment objectForKey:@“IPHONE_SIMULATOR_ROOT”];
if(模拟器根){
appSupportLocation=[SimulatorRootStringByAppendingString:appSupportLocation];
}
void*appSupportLibrary=dlopen([appSupportLocation fileSystemRepresentation],RTLD\u-LAZY);
CFStringRef(*copySharedResourcesPreferencesDomainForDomain)(CFStringRef域)=dlsym(appSupportLibrary,“CPCopySharedResourcesPreferencesDomainForDomain”);
if(域的CopySharedResourcesReferencesDomainforDomain){
CFStringRef accessibilityDomain=CopySharedResourcesReferencesDomainForDomain(CFSTR(“com.apple.Accessibility”);
if(可访问域){
CFPreferencesSetValue(CFSTR(“ApplicationAccessibilityEnabled”)、kCFBooleanTrue、accessibilityDomain、kCFPreferencesAnyUser、kCFPreferencesAnyHost);
CFRelease(可访问域);
}
}
[自动释放池排水];

我可以通过打开辅助功能检查器使其工作。我意识到这不如自动选项好,但对新手来说可能更容易。
CFPreferencesGetBooleanValue(@"ApplicationAccessibilityEnabled", @"/Users/sam/Library/Application Support/iPhone Simulator/User/Library/Preferences/com.apple.Accessibility", NULL);
#import <dlfcn.h>

NSAutoreleasePool *autoreleasePool = [[NSAutoreleasePool alloc] init];
NSString *appSupportLocation = @"/System/Library/PrivateFrameworks/AppSupport.framework/AppSupport";

NSDictionary *environment = [[NSProcessInfo processInfo] environment];
NSString *simulatorRoot = [environment objectForKey:@"IPHONE_SIMULATOR_ROOT"];
if (simulatorRoot) {
    appSupportLocation = [simulatorRoot stringByAppendingString:appSupportLocation];
}

void *appSupportLibrary = dlopen([appSupportLocation fileSystemRepresentation], RTLD_LAZY);

CFStringRef (*copySharedResourcesPreferencesDomainForDomain)(CFStringRef domain) = dlsym(appSupportLibrary, "CPCopySharedResourcesPreferencesDomainForDomain");

if (copySharedResourcesPreferencesDomainForDomain) {
    CFStringRef accessibilityDomain = copySharedResourcesPreferencesDomainForDomain(CFSTR("com.apple.Accessibility"));

    if (accessibilityDomain) {
        CFPreferencesSetValue(CFSTR("ApplicationAccessibilityEnabled"), kCFBooleanTrue, accessibilityDomain, kCFPreferencesAnyUser, kCFPreferencesAnyHost);
        CFRelease(accessibilityDomain);
    }
}

[autoreleasePool drain];