iOS应用程序:UIButton标记在控制器代码中不可用
我编写了一个方法,将字体更改为viewcontroller的所有控件。该方法获取viewcontroller的根视图,并递归迭代所有视图以更改字体。为了了解必须应用于文本的文本样式,我将Interface Builder中的代码设置为每个控件的tag属性。除了UIButton实例之外,其他一切都可以正常工作。UIButtons没有IBOutlet,因为我不需要在代码中显式引用它们。问题是,我的控制器无法使用以下方法检索按钮标记值:iOS应用程序:UIButton标记在控制器代码中不可用,ios,uibutton,interface-builder,Ios,Uibutton,Interface Builder,我编写了一个方法,将字体更改为viewcontroller的所有控件。该方法获取viewcontroller的根视图,并递归迭代所有视图以更改字体。为了了解必须应用于文本的文本样式,我将Interface Builder中的代码设置为每个控件的tag属性。除了UIButton实例之外,其他一切都可以正常工作。UIButtons没有IBOutlet,因为我不需要在代码中显式引用它们。问题是,我的控制器无法使用以下方法检索按钮标记值: int viewTag = [view tag]; 无论我在I
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];
}
}
}
视图控制器
- (void)viewDidLoad
{
.....
[FontManager setCustomFontToView:self.view];
}
我认为您是在为UIButton设置标记值,而不是它的子项UILabel。这就是为什么它总是返回0。添加对UIButton和tag的检查,而不是将字体设置为title label。创建iOutletCollection不是更容易吗?我认为您的标记设置为UIButton,而不是在标签上,并且标记在视图层次结构中也不是默认的 在IB控件中选择多个按钮并将其拖动到一个标题中,集合输出为一组按钮,您可以遍历这些按钮来更改字体
通过这种方式,完成这项工作所需的迭代次数更少。链接一组按钮确实不会对性能产生影响,但在遍历层次结构的每个子视图时会对性能产生影响,检查您是否可以更改标签。出于好奇,您是否尝试为其添加
IBOutlet
?您说您没有为按钮创建IBOutlet,那么什么是myButton?@dasblinkenlight自动化过程的目标正是避免为每个控件创建IBOutlet:$@rdelmar看到我的编辑(抱歉出错)您有[view isKindOfClass:[UILabel class],所以这不会导致您的代码只更改标签的字体吗?我认为您应该尝试使用外观代理更有效地更改字体