当UISwitch
从“关闭”更改为“开启”时,我希望更改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];
}
}
当我按下开关时,控制台正确记录,所以我知道它正在工作,但按钮的背景不会改变。
作为参考,Hard1ON
是我的UISwitch
而Hard1
是我的UIButton
。
答案 0 :(得分: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];
}
注意 使用camelCase表示法命名变量。
例如,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;
如果您使用强或保留而不是分配,并且您不在dealloc
中使用ARC版本
- (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];
}
答案 1 :(得分:0)
我认为您要使用-setBackgroundImage:forState:
代替-setImage:forState:
而且,正如@flexaddicted所说,你只想添加一次按钮。
答案 2 :(得分: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;
}
然后将其他按钮设置为选中NO
。然后按钮就像开关一样工作。
希望这会对你有所帮助。