2013-11-16 1 views
0

Я написал метод, чтобы изменить шрифт для всех элементов управления в ViewController. Метод получает корневой вид viewcontroller и рекурсивно итерации по всем представлениям для изменения шрифта. Чтобы узнать стиль текста, который должен применяться к тексту, я установил код из Interface Builder в свойство тега для каждого элемента управления. Все работает отлично, за исключением экземпляров UIButton. UIButtons не имеет IBOutlet, потому что мне не нужны какие-либо явные ссылки на них в коде. Проблема заключается в мой контроллер не может получить значение тега с помощью кнопки:IOS приложение: UIButton тег не доступен в коде контроллера

int viewTag = [view tag]; 

Это не всегда 0, независимо от того, что я установить в Interface Builder. Зачем?

Вот фрагмент кода, кода я использую:

FontManager класс

+ (void)setCustomFontToView:(UIView *)view { 

    if ([view isKindOfClass:[UILabel class]] && 
     [view respondsToSelector:@selector(setFont:)] ) { 

     int viewTag = [view tag]; 

     UIFont *font = nil; 

     if (viewTag == 1) { 

      font = [UIFont fontWithName:@"Frutiger-Light" size:18]; 

     } else if (viewTag == 2) { 

      font = [UIFont fontWithName:@"Frutiger-Bold" size:20]; 
     } 

     [(UILabel *) view setFont:font]; 
    } 

    NSArray *childViews = [view subviews]; 

    if ([childViews count] > 0) { 

     for (UIView *childView in childViews) { 
      [self setCustomFontToView:childView]; 
     } 
    } 
} 

ViewController

- (void)viewDidLoad 
{ 
    ..... 
    [FontManager setCustomFontToView:self.view]; 
} 
+0

Из любопытства, вы попробуйте добавить 'IBOutlet' для него? – dasblinkenlight

+0

Вы сказали, что не сделали IBOutlet к кнопке, так что такое myButton? – rdelmar

+0

@ dasblinkenlight Цель автоматизации процесса заключается в том, чтобы избежать необходимости создавать IBOutlet для каждого элемента управления: $. @ \t rdelmar видеть мое редактирование (извините за ошибки) –

ответ

1

Я думаю, что вы устанавливаете значение тега UIButton не UILabel это его ребенок. То почему он всегда возвращает 0. Добавьте проверку для UIButton и бирки, чем установите метку шрифта для заголовка.

1

Не было бы проще создать IBOutletCollection? Я думаю, что ваш тег установлен в UIButton, а не на ярлыке, а теги не дефолтуют иерархию представлений.

Вы выбираете несколько кнопок в IB и управление перетащить его в заголовок, выходы сбора в качестве NSArray кнопок и вы можете перебирать, что для изменения шрифтов.

Таким образом, есть меньше итераций, необходимых для выполнения работы. На самом деле нет никакого влияния на производительность, связанное с набором кнопок, но есть влияние производительности при итерации через каждое подчинение проверки иерархии, если вы даже можете изменить метку.

Смежные вопросы