2009-09-07 6 views
6

iPhoneアプリケーションのUIには静的ラベルが多く、インターフェイスビルダでアクセシビリティヒントを設定しています。これらのプログラムにアクセスして、ヘルプのバブルを提供することができます.UILabelのカスタムサブクラスはタッチを認識し、[self accessibilityHint]の値を持つバブルを表示します。accessibilityLabelとaccessibilityHintプロパティは常にNIBから読み込まれるとは限りません

ただし、[self accessibilityHint]はnilを返します。プログラムで値を設定すると(self setAccessibilityHint:@ "Hello")、プログラムからその値にアクセスできますが、NIBの初期値は使用できません。

アプリケーションを起動する前にアクセシビリティインスペクタをオンにすると、NIBファイルのヒントがaccessibilityHintプロパティを介して利用可能になります。システムがこれらのプロパティをロードするかどうかを決定するフラグがどこかありますか?もしあれば、私はそれを設定できる何らかの方法がありますか?

私のバックアップオプションは、私のコントローラが各UIラベルへの参照を保持し、コード内でaccessibilityHintを設定することですが、それはかなり面倒で厄介です。

答えて

3

ええと、Library/Preferences/com.apple.Accessibility.plistを開き、ApplicationAccessibilityEnabledをfalseからtrueに変更した場合、それは機能します。 (そのパスが〜/ライブラリ/ Application Supportにある/ iPhoneシミュレータ/)

私は、メイン()の開始時にこれを追加してみました:

CFPreferencesSetAppValue(@"AccessibilityEnabled", kCFBooleanTrue, @"com.apple.Accessibility"); 
CFPreferencesSetAppValue(@"ApplicationAccessibilityEnabled", kCFBooleanTrue, @"com.apple.Accessibility"); 
CFPreferencesAppSynchronize(@"com.apple.Accessibility"); 

が、それはうまくいきませんでした。 UIKitのコードをステップ実行後、アクセシビリティをオンまたはオフになっているか否かを判断する呼が

ある:

EDITを(それは、アプリケーション/ {UUID} /Library/Preferences/com.apple.Accessibility.plistにファイルを書き込みました)

CFPreferencesGetBooleanValue(@"ApplicationAccessibilityEnabled", @"/Users/sam/Library/Application Support/iPhone Simulator/User/Library/Preferences/com.apple.Accessibility", NULL); 

注奇妙なアプリキー、少なくとも上で、私はまだ、この値はどこから来るのかわからないんだけど(386アセンブリの私の知識は非常に弱いです!)が、私はCFPreferencesSetAppValueにこのキーを渡すことができ、それが動作しますシミュレータ(現時点で実際のデバイスにアクセスすることはできません)。

また、これにより、すべてのアプリケーションのアプリケーションアクセシビリティが有効になります(グローバルplistに書き込むため)。アプリケーションが起動したら、値をfalseに戻す必要がある場合は、main()からフラグを設定できます。

+0

アクセシビリティインスペクタをオンにすることで動作させることができました。私はこれが自動オプションほど良くはないことを認識していますが、初心者にとってはより簡単かもしれません。 –

0

これはシミュレータとデバイスで動作します。から入手しましたhttp://sgleadow.github.com/blog/2011/11/16/enabling-accessibility-programatically-on-ios-devices/

#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]; 
関連する問題