在从 XIB 加载的自定义视图中修改 UIButton 的标题标签
Posted
技术标签:
【中文标题】在从 XIB 加载的自定义视图中修改 UIButton 的标题标签【英文标题】:Modify the UIButton's title label in custom view loaded from a XIB 【发布时间】:2014-08-12 13:00:09 【问题描述】:在我的 ios 项目中,我从一个 XIB 文件加载一个自定义视图,正如 Paul Solt 在他的 CustomView(或 CompositeXIB)教程中所描述的那样。
_customView = [[[NSBundle mainBundle] loadNibNamed:@"CustomView" owner:self options:nil] firstObject];
[self addSubview:_customView];
在自定义视图中,我需要根据应用状态自定义一个按钮标题。所以我添加了一个 IBOutlet UIButton 属性来修改按钮的标题标签。
在头文件中:@property (weak, nonatomic) IBOutlet UIButton *theButton;
(该属性链接到XIB文件中相应的UIButton)
在实现文件的init方法中:_theButton.titleLabel.text = @"My own title";
在init方法覆盖XIB文件中定义的这个按钮后,按钮的标题设置得很好,但是点击按钮会导致XIB中定义的标题被重置。 如果标题未在 XIB 中定义,则按钮的标题始终为空。
【问题讨论】:
【参考方案1】:为“Normal
”和“Selected
”状态设置标题。
[YourButton setTitle:@"titleNormal" forState:UIControlStateNormal];
[YourButton setTitle:@"titleSelected" forState:UIControlStateSelected];
【讨论】:
你是对的。我刚刚发现我不必直接使用 titleLabel 属性,而是使用 setTitle:forState 方法。调用UIControlStateNormal
的方法就足够了,正如 Apple 文档中所述:“如果未为状态指定标题,则默认行为是使用与 UIControlStateNormal 状态关联的标题”。感谢您的快速回复。【参考方案2】:
UIControlState 请使用 settitle
[buttonVariable setTitle:@"Your Title" forState:UIControlState)];
UIControlState 是
typedef NS_OPTIONS(NSUInteger, UIControlState)
UIControlStateNormal = 0,
UIControlStateHighlighted = 1 << 0, // used when UIControl isHighlighted is set
UIControlStateDisabled = 1 << 1,
UIControlStateSelected = 1 << 2, // flag usable by app (see below)
UIControlStateApplication = 0x00FF0000, // additional flags available for application use
UIControlStateReserved = 0xFF000000 // flags reserved for internal framework use
;
【讨论】:
以上是关于在从 XIB 加载的自定义视图中修改 UIButton 的标题标签的主要内容,如果未能解决你的问题,请参考以下文章
来自 XIB 的自定义 UIView 加载具有巨大规模的子视图