2015-10-14 2 views
1

Можно ли легко внести изменения во все объекты определенного типа внутри моего приложения? Например, измените шрифт/цвет всех UILabels или примените функцию setAdjustsFontSizeToFitWidth: на всех UILabels.Как внести изменения во все объекты текстового поля типа в приложении?

+0

Вы можете опробовать метод swizzling. Если вы можете подгонять исходные селектор или методы типа к своему пользовательскому селектору или методу. Подробнее об этом читайте здесь - http://nshipster.com/method-swizzling/. HTH :) – iamyogish

+0

Вы можете настроить внешний вид целого класса элементов управления UIKit, используя UIAppearance https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIAppearance_Protocol/index.html –

+0

вы можете использовать ' Subclass' для установки определенного свойства каждого 'UILabel' в вашем проекте. подробнее читайте здесь ['subclassing' здесь] (https://www.objc.io/issues/13-architecture/subclassing/) –

ответ

0

Вы можете изменить ширину, цвет, размер 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. 
     } 
    } 

сделать класс объекта, который вы хотите использовать.

0

Попробуйте использовать следующую 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 и т.д.)
  • Используйте его с осторожностью, особенно если ваш пользовательский интерфейс является сложным - все работа выполняется в потоке пользовательского интерфейса (нет другого простого выбора), и вы не хотите блокировать его слишком долго ... По той же причине старайтесь не использовать его для основного окна приложения (как в моем примере) ,
Смежные вопросы