0

現在、UISS を使用してアプリのスタイルを変更していますが、特定のコントロールのスタイルを設定することはできないと思います。例えば。タグ1またはID「xpto」のボタンの画像を変更したい場合。UIAppearance または UISS でこれを行う方法はありますか?

次のようなボタンがあります。

UIButton *xpto = [[UIButton alloc] init];

メソッドが呼び出されたときにテーマを設定したいのですが、現在、UISSを使用してオブジェクトのテーマを設定しています

-(void) changeTheme:(NSString*)themeName{
    NSString *filePath = [[NSBundle mainBundle] pathForResource:themeName ofType:@"json"];
    AppDelegate *dlg =[[UIApplication sharedApplication] delegate];
    dlg.uiss.style.url = [NSURL fileURLWithPath:filePath];
    [dlg.uiss reloadStyleAsynchronously];
}

json ファイル:

{
    "UIButton": {
        "titleColor:normal": "red"
     }
}

私の唯一の問題は、これがすべての UIButtons を変更し、xpto のみを変更したいということです。このボタンのみを変更するために、次のようなものを定義する方法はありますか。

    "UIButton#xpto": {
        "titleColor:normal": "red"
     }
4

1 に答える 1

2

これを行うには、実行時にクラスを作成します。

まず、この関数をコードから見える場所に定義します。

Class SGBCreateClassWithId(Class baseClass, NSString *classId)
{
    NSString *className = NSStringFromClass(baseClass);

    if (classId.length > 0)
    {
        className = [NSString stringWithFormat:@"%@#%@", className, classId];
    }

    Class subClass = NSClassFromString(className);

    if (!subClass)
    {
        subClass = (Class)objc_allocateClassPair(baseClass, [className UTF8String], 0);
        if (subClass)
        {
            objc_registerClassPair(subClass);
        }
    }

    return subClass;
}

ここで、次の行を変更します。

UIButton *xpto = [[UIButton alloc] init];

これに:

Class classWithId = SGBCreateClassWithId([UIButton class], @"xpto")
UIButton *xpto = [[classWithId alloc] init];

UIButtonボタンがcalledのサブクラスに属するようになったUIButton#xptoので、UISS は思いどおりに動作するはずです。

1 つの注意点: UISS は、UISS JSON ファイルをロードした時点で存在するクラスのみを認識します。したがって、この方法で新しいクラスを作成する場合は、UISS JSON をリロードする必要があります。

于 2013-07-17T12:00:46.363 に答える