覆盖 - (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state 用于笔尖

Posted

技术标签:

【中文标题】覆盖 - (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state 用于笔尖【英文标题】:Override - (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state for nib 【发布时间】:2013-08-14 07:57:04 【问题描述】:

我有一个笔尖,我添加了一个按钮并为其提供了背景图像。 我创建了UIButton 的子类,并将该类赋予该按钮。

我想覆盖- (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state 用于笔尖。 有什么办法吗?

谢谢

【问题讨论】:

在您的自定义 UIButton 类中执行此操作。有什么问题? Puneet 是正确的 - 它应该可以工作(如果您在 NIB 中正确设置了按钮的类)。根据您想在子类方法中执行的操作,您可能仍希望在其中调用 [super setBackgroundImage:forState:]。否则你必须自己做所有事情。 在我的子类 setBackgroundImage:forState 中没有被调用 【参考方案1】:

如果您通过 Xcode 的 GUI 设置按钮的背景图像,它将调用默认方法而不是您自定义的 setBackgroundImage 方法。

为了调用你自己的方法,你应该在视图加载之后显式调用它。

【讨论】:

也许你可以用 Objective-C 类别来做,但我之前没有用过类别,所以我只能说试试看。【参考方案2】:

你可以继承一个 UIButton,但你应该小心你在做什么。只需将其子类化以更改其行为而不是其外观。要修改 UIButton 外观,您应该使用为此提供的接口方法,例如:

setTitle:forState: 
setBackgroundImage:forState: 
setImage:forState:

更新:

-(void)changeBackground:(UIImage *)image forState:(UIControlState)state

   [self setBackgroundImage:image forState:state];

【讨论】:

但如果我在笔尖中设置背景图像。并且 setBackgroundImage:forState: 函数没有在我的 uibutton 子类中被调用 Krishna 我告诉你我的要求,我也需要支持 ios7。假设有一个按钮。它对 IOS7 和 IOS6 有不同的图像。所以我想为此编写通用类。如果我按照你所说的那样做,那么我必须从我的代码中调用这个方法,我不想那样做。我想如果有人把图像名称放在笔尖。我们可以在子类中监听它,如果它是 ios7,则将后缀添加到图像名称。 然后您可以创建两个笔尖并使用笔尖名称初始化您的 customButton。使用所需的图像保存 ios7 和 ios6 的笔尖。在初始化时加载它。或者使用您的 iOS 版本检查调用更新的方法...

以上是关于覆盖 - (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state 用于笔尖的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能覆盖 WebView 'copy:' 方法?

为多对多关系覆盖核心数据设置器方法

如何使用 NSUserDefaults 注册用户默认值而不覆盖现有值?

用弧覆盖设置器

Response对象

分数标签显示值覆盖