2013-07-09 1 views
0

현재 UISS를 사용하여 일부 앱 스타일을 변경하고 있지만 특정 컨트롤을 스타일화할 수는 없습니다. 예 : 태그 1 또는 ID가 'xpto'인 버튼의 이미지를 변경하고 싶습니다. UIAppearance 또는 UISS를 사용하여이를 수행 할 수있는 방법이 있습니까?iOS에서 테마 변경

내가 좋아하는 버튼이 있습니다

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

을하고 메서드를 호출 할 때 나는

-(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과 테마로 객체를 UISS를 사용하고 순간, 테마를 원하는 파일 :

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

내 유일한 문제는 모든 UIButtons를 변경하고 xpto 만 변경하려고한다는 것입니다. 이 버튼을 변경하기 만하는 것과 같은 것을 정의 할 수있는 방법이 있습니까?

"UIButton#xpto": { 
     "titleColor:normal": "red" 
    } 
+3

일부 코드를 올리시겠습니까? –

+1

그들은 이걸 잘 해내 고 있습니다. https://github.com/tombenner/nui – Popeye

+0

nui에 관한 유일한 문제는 렌더링하려는 모든 컨트롤을 지정해야한다는 것입니다. 내가 가지고있는 테마를 변경하려면 말하자면 control1, 2, 3은 재 렌더링이 필요하고 가장자리까지 UIButton 이미지를 변경하는 것과 같은 복잡한 일을 할 수 없다는 것을 안다. – fnxpt

답변

2

런타임에 클래스를 생성하면됩니다.

첫째, 코드에서 볼 수있는 곳이 함수를 정의 : 이것에

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

: : 이제

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; 
} 

,이 라인 변경 이제

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

당신의 버튼은 UIButton#xpto이라는 UIButton의 하위 클래스에 속하므로 UISS는 당신이 원하는 방식으로.

주의 사항 : UISS는 UISS JSON 파일을로드 할 때 존재하는 클래스 만 인식합니다. 따라서 이러한 방식으로 새 클래스를 만들면 UISS JSON을 다시로드해야합니다.

+1

멋진 해킹, Simon. –

+0

와우, 좋은 코드가 있습니다. – htafoya