目前,我正在使用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"
}
}
我唯一的问题是,这会更改所有UIButton,而我只想更改xpto。有什么办法可以定义像波纹管这样的东西,只改变这个按钮。
"UIButton#xpto": {
"titleColor:normal": "red"
}
最佳答案
您可以通过在运行时创建类来做到这一点。
首先,在可以从代码中看到的地方定义此函数:
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
的子类,称为UIButton#xpto
,因此您的UISS应该按照您想要的方式工作。一个警告:UISS仅识别加载UISS JSON文件时存在的类。因此,如果您确实以这种方式创建新类,则需要重新加载UISS JSON。
关于ios - 在iOS上更改主题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17550638/