如何更改应用程序中文本字段类型的所有对象?
问题描述:
是否可以轻松地更改我的应用程序内某种类型的所有对象? 例如,更改所有UILabels的字体/颜色或在所有UILabels
上应用setAdjustsFontSizeToFitWidth:
函数。如何更改应用程序中文本字段类型的所有对象?
答
您可以使用下面的代码更改宽度,颜色,尺寸textfield
或任何对象。
for(UITextField *txt in self.view.subviews)
{
if([txt isKindOfClass:[UITextField class]])
{
//here do your work
txt.frame=CGRectMake(0, 50, 100, 100);//set size,color anything your want.
}
}
使您想要使用的对象的类。
答
尝试使用以下UIView
类别:
的UIView + MakeChange.h
@import UIKit;
@interface UIView (MakeChange)
+(void)makeChangeInView:(UIView*)superview
withBlock:(void(^)(__kindof UIView* view))block;
@end
的UIView + MakeChange.m
#import "UIView+MakeChange.h"
@implementation UIView (MakeChange)
+(void)makeChangeInView:(UIView*)superview
withBlock:(void(^)(__kindof UIView* view))block
{
if(!block || !superview) return;
for(UIView* subview in superview.subviews)
{
// Make changes to all subviews recursively
[self makeChangeInView:subview withBlock:block];
if([subview isKindOfClass:self.class])
block(subview);
}
}
@end
您可以更改字体/每个当前显示的颜色使用UILabel
验证码:
[UILabel makeChangeInView:[[[UIApplication sharedApplication] windows] firstObject]
withBlock:^(UILabel* label) {
[label setTextColor:[UIColor redColor]];
[label setFont:[UIFont systemFontOfSize:10.0]];
}];
- 显然,同样的类可以用于任何UIView子类,以及(
UITextField
,UIButton
等) - ,请谨慎使用,特别是如果你的UI是复杂的 - 所有工作是在UI线程上完成的(没有其他简单的选择),并且你不想阻塞它太长时间...出于同样的原因,尽量避免将它用于主应用程序窗口(如我的示例中所示) 。
你可以尝试方法swizzling。您可以将原始选择器或类型的方法调整为自定义选择器或方法。在这里阅读更多关于它的内容 - http://nshipster.com/method-swizzling/。 HTH :) – iamyogish
您可以使用UIAppearance自定义整个UIKit控件类的外观https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIAppearance_Protocol/index.html –
您可以使用'子类'选项可以在项目中设置每个“UILabel”的特定属性。阅读更多关于['子类'这里]的详细信息(https://www.objc.io/issues/13-architecture/subclassing/) –