2013-06-09 2 views
4

Я нашел свойство, называемое imageForState в xcode, но у меня проблемы с его получением, что я хочу. Когда нажимается кнопка, я хочу выполнить блок кода в зависимости от изображения кнопки.Как получить текущее изображение кнопки с помощью imageForState?

- (IBAction)favButton:(UIButton *)sender { 
    NSString *currentImage = [sender imageForState:UIControlStateNormal]; 
    if([currentImage isEqualToString:@"already_fav"]) 
    { 
     // execute code 
    } 
} 

Однако я получаю сообщение об ошибке:

Incompatible pointer types initializing NSString _strong with an expression type of UIImage 

Может кто-то пожалуйста, скажите, как это обойти?

+0

чтение carefully..the ошибка объясняет все :) .. и вы также должны дать второй взгляд на метод naming..they супер описательный в obj C – Shubhank

+0

Я понимаю сообщение об ошибке, но мне интересно, как получить текущее имя отображаемого изображения в виде строкового значения, очевидно, что мой код не работает, поскольку он сравнивает яблоки с апельсины – jake9115

+0

Вместо креати ng объект UIImage, есть ли какой-то способ только для строки имени файла, которая используется для отображения изображения? – jake9115

ответ

9

Уверен, что вы не можете сравнить строку с изображением. Однако есть решение. Все, что вам нужно сделать, это установить тег для изображения, которое вы хотите сравнить, и установить тег изображения, с которым вы сравниваете.

image1.tag = 1; 
image.tag =1; 

if(image1.tag == image.tag) { 
     // execute code 
} 

, который должен помочь, и я надеюсь, что так оно и есть.

ТАК, для этого упражнения я покажу вам. Изменение NSString к UIImage

UIImage *currentImage = [sender imageForState:UIControlStateNormal]; 

currentImage.tag = 1; 
wantedImage.tag = 1; 

if(currentImage.tag == wantedImage.tag) { 
    // do something 
} 

надеюсь, это поможет вам :)

1

вы не можете сохранить изображение в виде строки

попробовать

UIImage *currentImage = [sender imageForState:UIControlStateNormal];

, чем вы можете проверить :

if(currentImage == [UIImage imageNamed:@"already_fav"])

4

Когда вы создаете UIImage, это просто изображение и не имеет строкового значения. Имя не переносится объектом UIImage.

Если бы это был я (и это не единственное решение, просто другое предложение), я бы создал отдельные объекты UIImage (в зависимости от того, как много мы говорим здесь), поскольку это должно быть проверено, в то время как строки не являются ,

Например:

UIImage *image1 = [UIImage imageNamed:@"randomName"]; 
UIImage *image2 = [UIImage imageNamed:@"anotherRandomName"]; 
[myButton setImage:image2 forState:UIControlStateNormal]; 
if ([myButton imageForState:UIControlStateNormal] == image1) { 
    NSLog(@"The button shows image 1 for normal state"); 
} 
else if ([myButton imageForState:UIControlStateNormal] == image2) { 
    NSLog(@"The button shows image 2 for normal state"); 
} 
else { 
    NSLog(@"Error!!!!!!! :D"); 
} 
1

Я сделал это для переключения звука/NoSound изображения на кнопке:

- (IBAction)soundAction:(id)sender { 
    UIImage *sound = [UIImage imageNamed:@"sound"]; 
    UIImage *noSound = [UIImage imageNamed:@"noSound"]; 

    if ([[sender currentImage] isEqual:sound]) { 
     NSLog(@"IF SOUND IMAGE"); 
     [sender setImage:noSound forState:UIControlStateNormal]; 
     //your code 
    } else if([[sender currentImage] isEqual:noSound]) { 
     NSLog(@"IF NO SOUND IMAGE"); 
     [sender setImage:sound forState:UIControlStateNormal]; 
     //your code 
    } 
} 
Смежные вопросы