Изменение изображения на UIButton, когда пользователь нажимает ту кнопку на iPhone

Предыдущие ответы не решили мою проблему, но этот код сделал:

import sys 
for name, module in sorted(sys.modules.items()): 
  if hasattr(module, '__version__'): 
    print name, module.__version__ 
36
задан David P 14 April 2014 в 14:13
поделиться

4 ответа

Чтобы изменить изображение для выбранного состояния, вы должны вызвать setImage для состояния UIControlStateSelected . Вы можете установить отдельные изображения для разных состояний (Нормальное, Выделено, Отключено, Выбрано и т. Д.).

5
ответ дан 27 November 2019 в 05:09
поделиться

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

Это своего рода взлом, но вы можете попробовать немного отложить изменение вида, чтобы кнопка обновилась.

Вместо этого:

[btnthumbnail2 setImage:[UIImage imageNamed:@"leaderboard_ov.png"] forState:UIControlStateNormal];
[self showMyOtherView];

Попробуйте следующее:

[btnthumbnail2 setImage:[UIImage imageNamed:@"leaderboard_ov.png"] forState:UIControlStateNormal];
[self performSelector:@selector(showMyOtherView) withObject:self afterDelay:0.01];
11
ответ дан 27 November 2019 в 05:09
поделиться

Я написал код, который делает именно это вчера вечером, и мне не пришлось прибегать к какой-либо странной тактике задержки. В этом конкретном случае я делаю это из tableViewCell. Это больше кода, чем вы просили, но он показывает весь процесс, который я использовал. Как видите, я решил не отображать какое-либо специальное изображение в течение определенного периода времени ВО ВРЕМЯ нажатия кнопки.

// Button set up, inside cellForRowAtIndexPath:
// imageFrame is just the rect that you want the button to occupy
  [self setFavorite:[[UIButton alloc] initWithFrame:imageFrame]];
  [[self favorite] addTarget:self action:@selector(toggleFavorite:)
        forControlEvents:UIControlEventTouchUpInside];
  [cell addSubview:[self favorite]];
  [self draw];


// definition of the callback specified above
- (void) toggleFavorite:(id) sender {
  if (favoriteState == 0 ){
    favoriteState = 1;
  } else {
    favoriteState = 0;
  }
  [self draw];
}

// the draw method, to set the images
// favOn and favOff are statically defined at the top of the class
- (void) draw {
  if (favoriteState != 0) {
    [[self favorite] setBackgroundImage:favOn forState:UIControlStateNormal];
    [[self favorite] setBackgroundImage:favOn forState:UIControlStateHighlighted];
  } else {
    [[self favorite] setBackgroundImage:favOff forState:UIControlStateNormal];
    [[self favorite] setBackgroundImage:favOff forState:UIControlStateHighlighted];
  }
}
1
ответ дан 27 November 2019 в 05:09
поделиться

Я использую Interface Builder, в котором я добавил в представление UIButton .

  1. Я определил кнопку , выбранную по умолчанию, и выбрал свое изображение для состояния , выбрано (Используйте раскрывающийся список в окне инспектора, чтобы выбрать « Конфигурация выбранного состояния ] "перед выбором изображения).

  2. Создайте IBAction в контроллере и подключите кнопку к этому действию.

  3. Тогда посмотрите код ниже:

  -(IBAction) toggleUIButtonImage:(id)sender{
      if ([sender isSelected]) {
         [sender setImage:unselectedImage forState:UIControlStateNormal];
         [sender setSelected:NO];
      } else {
         [sender setImage:selectedImage forState:UIControlStateSelected];
         [sender setSelected:YES];
      }
  } 

Я думаю, что это довольно простое решение. Надеюсь, это поможет!

98
ответ дан 27 November 2019 в 05:09
поделиться