2016-03-18 2 views
0

У меня есть несколько кнопок. Изображения кнопок - это круг или X. Я хочу проверить изображение кнопок на самом деле. Я судимо его с помощью следующего кода, но я получаю всегдаCheck Buttons Изображение не работает

цифровых кнопки изображения устанавливается

[_cell00 setImage: [UIImage imageNamed:[NSString stringWithFormat:@"Dot_X.png"]] forState:UIControlStateNormal]; 

и ЭРВА моя проверка кода "_cell00 = X!":

if ([_cell00 imageForState:UIControlStateNormal] == [UIImage imageNamed:[NSString stringWithFormat:@"Dot_X.png"]]) { 
         NSLog(@"CELL00 = X"); 
} 

или:

if ([_cell00 imageForState:UIControlStateNormal] != [UIImage imageNamed:[NSString stringWithFormat:@"Dot_X.png"]]) {       NSLog(@"CELL00 != X"); 
} 

В чем проблема в моем случае?

ответ

1

Просто используйте backgroundImageForState метод UIButton который возвращает UIImage

- (UIImage *)backgroundImageForState:(UIControlState)state 

как ниже код:

if ([[_cell00 backgroundImageForState:UIControlStateNormal] isEqual:[UIImage imageNamed:[NSString stringWithFormat:@"Dot_X.png"]]]){ 
    // NSLog(@"CELL00 = X"); 
} else{ 
    // Something 
} 

ИЛИ

if ([[_cell00 backgroundImageForState:UIControlStateNormal] == [UIImage imageNamed:[NSString stringWithFormat:@"Dot_X.png"]]]) { 

    // 
} 
else{ 


} 
+0

большое спасибо! isEqual вместо == было правильным предложением. Не знаю, почему, но теперь он работает! – Sausagesalad

+0

Отлично, с удовольствием помогите @ Sausagesalad –

1

в порядке, UIImage метод [UIImage imageNamed:[NSString stringWithFormat:@"Dot_X.png"]] всегда создает новый экземпляр объекта изображения, приходит в ваш код

UIImage *image_X = [UIImage imageNamed:[NSString stringWithFormat:@"Dot_X.png"]]; //<UIImage: 0x7a041ae0> an example lets say 
[_cell00 setImage:image_X forState:UIControlStateNormal]; 

в указанном выше способе у настраивает новый экземпляр изображения для кнопок нормального состояния позволяет сказать, что это <UIImage: 0x7a041ae0>

в методе сравнения,

UIImage *image_X = [UIImage imageNamed:[NSString stringWithFormat:@"Dot_X.png"]]; //<UIImage: 0x78e02e90> it create a brand new image 
if ([_cell00 imageForState:UIControlStateNormal] == image_X) 
{ 
    NSLog(@"CELL00 = X"); 
} 

в приведенном выше коде, у вновь создает новый экземпляр, который отличается от того, у уже установленного для кнопки _cell00 изображение <UIImage: 0x78e02e90> это совершенно другое, то будет это все дни s идет в «_cell00! = X»

так вместо и можно сделать, как показано ниже,

в процессе настройки изображения для кнопки установить все изображения кнопки для,

[_cell00 setImage: [UIImage imageNamed:[NSString stringWithFormat:@"Dot_X.png"]] forState:UIControlStateNormal]; 
[_cell00 setImage: [UIImage imageNamed:[NSString stringWithFormat:@"Dot_X.png"]] forState:UIControlStateHighlighted]; 
[_cell00 setImage: [UIImage imageNamed:[NSString stringWithFormat:@"Dot_O.png"]] forState:UIControlStateSelected]; 

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

if(_cell00.selected) 
{ 
    _cell00.selected = NO; 
    NSLog(@"CELL00 = X"); 
} 
else 
{ 
    _cell00.selected = YES; 
    NSLog(@"CELL00 != X"); 
} 
+0

спасибо за ваше объяснение экземплярам изображений! хорошо знать! – Sausagesalad

Смежные вопросы