0

当 aUISwitch从“OFF”变为“ON”时,我希望 a 的背景图像发生UIButton变化。我有以下代码:

- (IBAction)switchValueChanged {
    if (Hard1ON.on) {
        UIImage *buttonImage = [UIImage imageNamed:@"red.jpg"];
        [Hard1 setImage:buttonImage forState:UIControlStateNormal];
        [self.view addSubview:Hard1];
        NSLog(@"Change");
    }
    else {
        UIImage *buttonImage = [UIImage imageNamed:@"white.jpg"];
        [Hard1 setImage:buttonImage forState:UIControlStateNormal];
        [self.view addSubview:Hard1];
    }
}

当我按下开关时,控制台会正确记录,所以我知道它正在工作,但是按钮的背景没有改变。

供参考,Hard1ONis myUISwitchHard1is my UIButton.

4

3 回答 3

4

添加一次按钮,最常见的方法是添加它,viewDidLoad然后在执行切换时更改其图像。

所以,内部viewDidLoad方法

// create the button
[self.view addSubview:Hard1];

然后,在您的值更改方法中

if (Hard1ON.on) {
    UIImage *buttonImage = [UIImage imageNamed:@"red.jpg"];
    [Hard1 setImage:buttonImage forState:UIControlStateNormal];
    NSLog(@"Change");
} else {
    UIImage *buttonImage = [UIImage imageNamed:@"white.jpg"];
    [Hard1 setImage:buttonImage forState:UIControlStateNormal];
}

注意 使用驼峰命名法命名变量

例如,Hard1应该看起来像hard1. 最好将其命名为hard1Button或类似。这同样适用于开关元件。例如,hard1OnSwicth.

编辑

我会尝试在viewDidLoad方法中以编程方式创建按钮。

- (void)viewDidLoad
{ 
    [super viewDidLoad];

    self.hardButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [self.hardButton setFrame:CGRectMake(0, 0, 200, 50)]; // set the x,y,width and height based on your specs
    UIImage *buttonImage = [UIImage imageNamed:@"white.jpg"];
    [self.hardButton setImage:buttonImage forState:UIControlStateNormal];
    [self.view addSubview:self.hardButton];
}

其中 hardButton 是对在 .h 中声明的按钮的引用(例如),例如

@property (nonatomic, assign) UIButton* hardButton;

像这样合成它(如果你愿意,如果不是 Xcode 会照顾你)

@synthesize hardButton = _hardButton;

如果您使用strongretain而不是 assign 并且您不使用 ARC release in dealloclike

- (void)dealloc
{ 
   [_hardButton release];
   [super dealloc];
}

现在,在你的开关值改变了。

- (IBAction)switchValueChanged
{
    UIImage* buttonImage = nil;
    if (Hard1ON.on) {
        buttonImage = [UIImage imageNamed:@"red.jpg"];
    } else {
        buttonImage = [UIImage imageNamed:@"white.jpg"];
    }

    [self.hardButton setImage:buttonImage forState:UIControlStateNormal];
}
于 2013-02-24T12:07:38.730 回答
0

如果您使用按钮作为开关,您可以喜欢这种方式。

  _btnMale = [UIButton buttonWithType:UIButtonTypeCustom];
   [_btnMale setBackgroundImage:[ UIImage imageNamed:@"checkBox.png"] forState:UIControlStateNormal];
   [_btnMale setBackgroundImage:[ UIImage imageNamed:@"checkMark.png"] forState:UIControlStateSelected];
   _btnMale.tag = 1;
   _btnMale.frame = CGRectMake(150 , 9, 25, 25);
   [_btnMale addTarget:self action:@selector(selectGender:) forControlEvents:UIControlEventTouchUpInside];
   [self addSubview:_btnMale];

根据您的需要,在 viewDidLoad/viewDidAppear 方法中为选中状态和正常状态设置按钮图像。声明后,在您的目标方法中添加此代码。

-(void)selectGender:(UIButton*)sender{

  sender.selected = ! sender.selected;

}

然后将其他按钮设置为 selected NO。然后按钮将像开关一样工作。

希望这会帮助你。

于 2013-02-24T13:43:33.430 回答
0

我想你想用-setBackgroundImage:forState:而不是-setImage:forState:

而且,正如@flexaddicted 所说,您只想添加一次按钮。

于 2013-02-24T12:07:30.273 回答