Как получить имя изображения с UIButton на iPhone SDK? - PullRequest
5 голосов
/ 14 февраля 2011

Я пытаюсь получить имя фонового изображения из пользовательской кнопки.

Я вызываю этот метод, когда нажимаю на кнопку UIB:

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

Я могу получитьназвание и другие свойства кнопки, но не имя фонового изображения.

Кто-нибудь знает, как это сделать?Спасибо!

Ответы [ 6 ]

10 голосов
/ 27 августа 2012

Это самый простой способ получить текущее изображение пользовательской кнопки

-(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);
}
1 голос
/ 14 февраля 2011

Нет способа превратить UIImage в имя, используемое с [UIImage imageNamed:].

Вы злоупотребляете изображением для хранения данных?
Что вы пытаетесь сделать с именем изображения?


Редактировать:

У меня есть несколько кнопок, я хочу получить имя изображения, когда я нажимаю кнопку, переключаюсь на другой контроллер представления и загружаю это изображение с именем.

Нет необходимости делать это, просто передайте экземпляр UIImage.
Если вы хотите показать другое изображение на основе имени, например, у вас есть миниатюра и вы хотите показать большую версию в другом контроллере представления, вам нужно получить имя изображения из вашей модели данных и передать его в контроллер представления.
Как вы решаете, какая кнопка получает какое изображение?

0 голосов
/ 04 августа 2014
 UIButton *senderButton = (UIButton*)sender;    
 if ([senderButton.currentTitle isEqualToString:@"Hello"]) {
            [senderButton setTitle:@"H" forState:UIControlStateNormal];
        }
        else {
            [senderButton setTitle:@"Hello" forState:UIControlStateNormal];
    forState:UIControlStateNormal];
        }
0 голосов
/ 12 мая 2014

В ответ на ответ Матиаса «Нет необходимости делать это, просто передайте экземпляр UIImage», который был для меня решением, с конкретным кодом для новых участников:

0 голосов
/ 28 ноября 2011

Вы можете унаследовать 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

0 голосов
/ 14 февраля 2011

@ fluchtpunkt Как вы говорите, у меня есть несколько миниатюр, которые представляют собой кнопки UI с фоновым изображением. Что происходит, я создаю следующим образом для категории, выбранной в предыдущем контроллере представления. Как то так ...

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];
    }
}

Спасибо за ответ

...