如何通过子类化 UIButton 来获取按钮的背景图像名称?

Posted

技术标签:

【中文标题】如何通过子类化 UIButton 来获取按钮的背景图像名称?【英文标题】:How to get the background image name of a button by sub classing UIButton? 【发布时间】:2014-12-18 13:55:10 【问题描述】:

我想在点击按钮时获取按钮的背景图像名称。在网上搜索了很多后,我发现

由于 UIImage 不存储它包含的图像的名称, .我们必须自己将名称存储在其他地方 与按钮或图像的关系

通过this SO 回答。但是我想知道我需要从 UIButton 覆盖什么方法来获取背景图像名称?

按钮的标签、标题文本和可访问性标识符已用于其他目的。所以除了获取图像名称之外,我别无选择。

我的应用支持从 ios 7 到最新版本。

【问题讨论】:

创建一个具有 NSString 属性的 UIImage 类别? 我不明白你为什么需要覆盖。另外图像名称来自哪里?您是以编程方式创建按钮还是使用情节提要。无论哪种方式,您为什么不创建一个类别并添加显示图像名称的其他属性。 @Vig 正在使用情节提要设置按钮图像。 如果您使用情节提要,我认为没有办法实际获取图像名称(至少我不知道)。我假设您还使用情节提要设置背景图像? @Vig 是正确的,我也使用故事板设置背景图像 【参考方案1】:

您可以使用类别将图像名称存储在 UIImage 本身的实例中。

在 UIImage 上添加一个名为 ImageName 的新类别并向其添加一个属性:

//UIImage+ImageName.h

#import <UIKit/UIKit.h>

@interface UIImage (ImageName)

@property (strong, nonatomic) NSString *imgName;

@end

然后,您可以通过导入类别简单地将图像名称附加到任何 UIImage。

#import "UIImage+ImageName.h"

NSString *name = @"someImage.jpg";
UIImage *image = [UIImage imageNamed:name];
image.imgName = name;

【讨论】:

【参考方案2】:

由于 UIImage 不存储它包含的图像的名称,所以你不能。您必须自己将名称存储在与按钮或图像相关的其他位置。

How to get the name of the backgroundImage from a button?

【讨论】:

我已经看到了这个答案,甚至我在我的问题中也做了同样的标记

以上是关于如何通过子类化 UIButton 来获取按钮的背景图像名称?的主要内容,如果未能解决你的问题,请参考以下文章

我将 UIButton 子类化以创建自己的自定义按钮外观,但它不会重绘所有触摸事件

子类化 UIButton 并将 UILabel 添加到视图层次结构会导致 currentImage 压缩

Ios UIButton 与 OpenGL 的子类化

如何在不通过 Interface Builder 获取 UIButton 类的背景的情况下添加图像?

自定义 UIButton 的边缘在与它交互后看起来像素化

如何使自定义 UIButton 变暗