2011-02-14 155 views
5

我想从自定义按钮中获取背景图像的名称。如何从iPhone SDK上的UIButton获取图像名称?

我把这种方法,当我点击过的UIButton:

-(void)getButtonImageName:(id)sender{  
    UIButton *resultButton = (UIButton *)sender; 
    NSLog(@" The button's image is %@.", resultButton.currentImage); 
} 

我能拿到冠军,并从按钮的其他属性,但不是背景图像名称。

任何人都知道该怎么做?谢谢!

回答

1

没有办法将UIImage变成与[UIImage imageNamed:]一起使用的名称。

你滥用图片以存储数据吗?
你试图用图像的名称来完成什么?


编辑:

我有几个按钮,我想要得到的图像名字,当我按下一个按钮,切换到其他视图控制器和加载图像的名称。

无需执行此操作,只需传递UIImage实例即可。
如果你想显示基于名称的不同图像,就像你有一个缩略图,并且想要在另一个视图控制器中显示大版本一样,你必须从数据模型中获取图像名称并将其传递给视图控制器。
你如何决定哪个按钮获取哪个图像?

+0

我有几个按钮,我想,当我得到的图像名称按一个按钮,切换到另一个视图控制器并加载该图像的名称。 – karse23 2011-02-14 09:26:34

0

@fluchtpunkt正如你所说,我有一些缩略图是带有背景图像的UIbuttons。会发生什么是我创建如下在前面的视图控制器中选择的类别。事情是这样的......

if([strSection isEqualToString:@"animals"]){ 
     [button_thumbnail_1 setBackgroundImage:[UIImage imageNamed:@"image1.png"] forState:(UIControlState)normal]; 
     [button_thumbnail_2 setBackgroundImage:[UIImage imageNamed:@"image2.png"] forState:(UIControlState)normal]; 
    } 
    if([strSection isEqualToString:@"cars"]){ 
     [button_thumbnail_1 setBackgroundImage:[UIImage imageNamed:@"image1.png"] forState:(UIControlState)normal]; 
     [button_thumbnail_2 setBackgroundImage:[UIImage imageNamed:@"image2.png"] forState:(UIControlState)normal]; 
    } 
} 

感谢响应

0

你可以继承的UIButton:

//.h 
@interface MySpecialButton : UIButton { 
    int mySpecialAttribute; 
} 

@property (nonatomic) int mySpecialAttribute; 

- (void) setBackgroundImage; 
- (UIImage*) getImage; 

@end 

,并使用您的特殊属性都设置并返回映像名称:

//.m 
@implementation LetterButton 

@synthesize mySpecialAttribute; 
- (void) setBackgroundImage { 

    [self setBackgroundImage:[self getImage] forState:UIControlStateNormal]; 
    [self setBackgroundImage:[self getImage] forState:UIControlStateDisabled]; 
} 

- (UIImage*) getImage { 
    NSString *fileName = [NSString stringWithFormat: 
      @"My_special_image_%i.png", mySpecialAttribute]; 

    return [UIImage imageNamed:fileName]; 
} 

@end 

在xib中设置按钮的类别:

use of MySpecialButton

10

这是为了得到一个自定义按钮

-(void)yesButtonButtonCliked:(id)sender 
{ 
    UIButton *tmpYes = (UIButton *)sender; 
    [self ClearAllButtons:tmpYes.tag:@"YES"]; 
    UIImage* selectedImg=[UIImage imageNamed:@"checkboxtick.png"]; 
    if (tmpYes.currentImage == selectedImg) 
    { 

    } 
    else 
    { 
     [tmpYes setImage:[UIImage imageNamed:@"checkboxtick.png"] forState:UIControlStateNormal]; 
    } 
    NSLog(@"Button tag is %d",tmpYes.tag); 
} 
0

对马蒂亚斯的回答继当前图像最简单的做法“没有必要做这个,只是通过UIImage的实例,”这是解决方案对我来说,与同胞newbs具体代码:

Calling .m: 
    -(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
       //Create an instance of the destination controller 
       dmImageZoom *dmz = (dmImageZoom *)[segue destinationViewController]; 
       //Get the tapped button (the image was in a button) into a button object 
       UIButton *btnImg= sender; 
       //Get the button's image object 
       UIImage *img=btnImg.currentImage; 
       //Pass the image object to the destination controller's instance variable 
       dmz.imgPassed=img; 

Called .h: 
@interface dmImageZoom : UIViewController { 
    //Instance variable 
    UIImage *imgPassed; 
} 
    //Property for the object that presents the image 
    @property (strong, nonatomic) IBOutlet UIImageView *imgView; 
    //Property that enables it to be assigned a value 
    @property (strong, nonatomic) IBOutlet UIImage *imgPassed; 

Called .m: 

- (void)viewDidLoad 
{ 
    ... 
    imgView.contentMode = UIViewContentModeScaleAspectFit; 
    //Assign the image to view object 
    imgView.image=imgPassed; 
0
UIButton *senderButton = (UIButton*)sender;  
if ([senderButton.currentTitle isEqualToString:@"Hello"]) { 
      [senderButton setTitle:@"H" forState:UIControlStateNormal]; 
     } 
     else { 
      [senderButton setTitle:@"Hello" forState:UIControlStateNormal]; 
    forState:UIControlStateNormal]; 
     }