我编写了一个方法来将字体更改为viewcontroller的所有控件。该方法获取viewcontroller的根视图,并递归迭代所有视图以更改字体。要知道必须应用于文本的文本样式,我将Interface Builder中的代码设置为每个控件的tag属性。除了UIButton实例外,一切正常。 UIButtons没有IBOutlet,因为我不需要在代码中对它们进行任何显式引用。问题是我的控制器无法使用以下方法检索按钮标记值:
int viewTag = [view tag];
无论我在Interface Builder中设置什么,它始终为0。为什么呢?
这是我使用的代码的代码段:
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 :(得分:1)
我认为你正在为UIButton而不是UILabel设置标签值,这是它的孩子。这就是它总是返回0的原因。添加一个UIButton和tag的检查,而不是将字体设置为标题标签。
答案 1 :(得分:1)
创建IBOutletCollection会不会更容易?我认为您的标记设置为UIButton,而不是标签,并且标记不会默认在视图层次结构中。
您可以在IB中选择多个按钮并将其拖动到标题中,该集合将作为NSArray按钮输出,您可以通过迭代来更改字体。
这样,完成工作所需的迭代次数就会减少。连接按钮集合确实没有性能影响,但是如果你甚至可以更改标签,那么在遍历层次结构检查的每个子视图时会产生性能影响。