iOS:XIB中使用的图像的名称

时间:2013-01-21 21:04:04

标签: iphone ios objective-c xib nscoder

有没有办法找出图像的代码名称在XIB中用于例如按钮的背景?

假设我有带按钮的xib,其属性Background(对于State Config:Default)设置为“button.png”,按钮有一个IBOutlet,例如myButton。当我的视图是从xib创建的时候我可以通过以下方式轻松访问图像:[myButton backgroundImageForState:UIControlStateNormal]但它当然是UIImage,但我需要找到xib中使用的图像名称(“button.png”)。

我试图将UIButton子类化并在initWithCoder中找到NSCoder:(NSCoder *)aDecoder但没有结果

定义按钮背景的xib的一部分是

<object class="NSCustomResource" key="IBUINormalBackgroundImage">
    <string key="NSClassName">NSImage</string>
    <string key="NSResourceName">button.png</string>
</object>

尝试的是:

NSObject * obj = [aDecoder decodeObjectForKey:@"IBUINormalBackgroundImage"];

但不起作用(如何在从nib初始化时使用NSCoder?)

还试图覆盖

-(void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state{
    [super setBackgroundImage:image forState:state];
}

但是从未调用过,但是在awakeFromNib中,每个都已经初始化并加载了。

有人可以解释/帮助吗?

1 个答案:

答案 0 :(得分:1)

是的,一旦是UIImage,就不会保留原始文件名的引用。

但是如果您需要来自UIButton,可以使用其imageView的辅助功能标识符来规避问题。这个方法应该可以在任何子类UIView上使用。

NSString *filename = [button.imageView accessibilityIdentifier] ;