UIButton image / фоновое изображение странность - PullRequest
0 голосов
/ 02 июля 2010

У меня есть пользовательский UIButton в моем viewcontroller, который должен иметь изображение красного или синего сердца в зависимости от значения переменной при загрузке viewcontroller.Если пользователь нажимает кнопку, он меняет значение «Красный / Синий» в модели домена и также должен переключать изображение кнопки.Цвет кнопки будет загружаться правильно, если я вызову следующий код в ViewWillAppear:

if ([self.color isBlue])
     self.colorButton.imageview.image = [UIImage imageNamed:@"blueHeart.png"];
else
     self.colorButton.imageview.image = [UIImage imageNamed:@"redHeart.png"];

Но я не могу заставить его изменить цвет при нажатии кнопки.Когда кнопка нажата, вызывается мой метод toggleColor: action:

- (IBAction)toggleColor:(id)sender
{
    if ([self.color isBlue])
    {
        [self.color makeRed];
        self.colorButton.imageView.image = [UIImage imageNamed:@"redHeart.png"];
    }       

    else 
    {
        [self.color makeBlue];
        self.colorButton.imageView.image = [UIImage imageNamed:@"blueHeart.png"];
    }
}

Значения обновляются в переменной color, как и должно быть, но цвет кнопки не меняется.(Я проверял в отладчике, что все строки кода выполняются так, как они должны быть.) Я пытался использовать [button setImage: forState:] и [button setBackgroundImage: forState:], но они не ведут себя должным образом.Может кто-нибудь, пожалуйста, просто проведите меня через шаги для метода ViewWillAppear: (или ViewDidLoad :) и моего метода toggleColor:?Я что-то здесь упускаю.

1 Ответ

0 голосов
/ 02 июля 2010

Это сработало для меня:

- (void) viewDidLoad {     
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.frame = CGRectMake(50, 40, 30, 30);
    [button setImage:[UIImage imageNamed:@"red.png"] forState:UIControlStateNormal];
    [button setImage:[UIImage imageNamed:@"blue.png"] forState:UIControlStateSelected];
    [button addTarget:self action:@selector(toggleButtonImages:) forControlEvents:UIControlEventTouchUpInside];     
    [self.view addSubview:button];
}

-(void) toggleButtonImages:(UIButton *)button {
    UIImage *temp = [button imageForState:UIControlStateNormal];
    [button setImage:[button imageForState:UIControlStateSelected] forState:UIControlStateNormal];
    [button setImage:temp forState:UIControlStateSelected];
}
...