目前我正在使用 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/