在从 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 加载具有巨大规模的子视图

如何在 Objective-C 控制器中以编程方式加载用 swift 编写的自定义 XIB 视图

从 .xib 加载自定义视图不适合 iPhone 6+

如何用不同的 Xib 替换我的自定义视图

从 xib 加载 iOS 不起作用

如何获取从 nib ios 加载的自定义视图的实际大小