Подтвердить что ты не робот

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

Я хочу изменить изображение на UIButton, когда Пользователь нажимает эту кнопку. Итак, я написал

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

и после этого я изменил представление.

Изображение меняется, но не отображает измененное изображение. Я думаю, что controll переходит к следующему виду, почему это происходит. Но я хочу показать изменения, как я могу это сделать? Plz помогите мне в этом..

4b9b3361

Ответ 1

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

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

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

  • Затем см. код ниже:

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

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

Ответ 2

Это самый простой способ, которым я занимаюсь, и он работает каждый раз

-(void)buttonTouched:(id)sender
{
 UIButton *btn = (UIButton *)sender;

 if( [[btn imageForState:UIControlStateNormal] isEqual:[UIImage imageNamed:@"icon-Locked.png"]])
    {
       [btn setImage:[UIImage imageNamed:@"icon-Unlocked.png"] forState:UIControlStateNormal];
       // other statements
    }
 else
   {
       [btn setImage:[UIImage imageNamed:@"icon-Locked.png"] forState:UIControlStateNormal];
       // other statements
   }
}

Вы можете использовать другие аналогичные проверки для других состояний, таких как SELECTED, ENABLED, HIGHLIGHTED.

Ответ 3

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

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

Итак, вместо этого:

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

Ответ 4

Чтобы изменить изображение для выбранного состояния, вы должны вызвать setImage для состояния UIControlStateSelected. Вы можете установить отдельные изображения для разных состояний (Normal, Highlighted, Disabled, Selected и т.д.).

Ответ 5

Если вы хотите изменить изображение при нажатии кнопки, таким образом, отлично работает:

-(IBAction)buttonClicked: (id)sender
{   
  UIButton *buttonObj = (UIButton*)sender;
  [buttonObj setBackgroundImage:[UIImage imageNamed:@"myImage.png"]   
  forState:UIControlStateNormal];
}

Ответ 6

Самый простой способ сделать это - просто установить выделенное изображение в Interface Builder.

Ответ 7

Основываясь на ответе Nicsoft.

-(void)viewDidLoad {
    [super viewDidLoad];
    [self.button setImage:[UIImage imageNamed:@"unselectedImageName"] forState:UIControlStateNormal];
    [self.button setImage:[UIImage imageNamed:@"selectedImageName"] forState:UIControlStateSelected];
}

-(IBAction)toggleButton:(UIButton *)sender {
    sender.selected = !sender.selected;
    // Add logic here
}

Ответ 8

Я написал код, который делает именно эту последнюю ночь, и мне не пришлось прибегать к какой-то странной тактике задержки. В этом конкретном случае я делаю это изнутри 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];
  }
}

Ответ 9

Ненависть добавить к множеству ответов, но:

  • Выберите изображения в IB для кнопки по умолчанию и выбранных состояний.
  • Подключите IBAction и сохраните его.

    @IBAction func buttonTapped(sender: UIButton){sender.selected = !sender.selected}

Готово.