如何更改应用程序中文本字段类型的所有对象?

问题描述:

是否可以轻松地更改我的应用程序内某种类型的所有对象? 例如,更改所有UILabels的字体/颜色或在所有UILabels上应用setAdjustsFontSizeToFitWidth:函数。如何更改应用程序中文本字段类型的所有对象?

+0

你可以尝试方法swizzling。您可以将原始选择器或类型的方法调整为自定义选择器或方法。在这里阅读更多关于它的内容 - http://nshipster.com/method-swizzling/。 HTH :) – iamyogish

+0

您可以使用UIAppearance自定义整个UIKit控件类的外观https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIAppearance_Protocol/index.html –

+0

您可以使用'子类'选项可以在项目中设置每个“UILabel”的特定属性。阅读更多关于['子类'这里]的详细信息(https://www.objc.io/issues/13-architecture/subclassing/) –

您可以使用下面的代码更改宽度,颜色,尺寸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子类,以及(UITextFieldUIButton等)
  • ,请谨慎使用,特别是如果你的UI是复杂的 - 所有工作是在UI线程上完成的(没有其他简单的选择),并且你不想阻塞它太长时间...出于同样的原因,尽量避免将它用于主应用程序窗口(如我的示例中所示) 。