覆盖 - (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 用于笔尖的主要内容,如果未能解决你的问题,请参考以下文章