我的视图控制器底部有3个按钮,btn1 btn2 btn3,我正在使用它们而不是标签栏,因为根据我的要求无法完全自定义标签栏。
现在的问题是,当按下btn1时,我希望它将其图像更改为灰色矩形,而不是正常的状态图像。我已使用插座的setimage和uicontrolstate属性为我为按钮btn1Outlet声明的插座设置了两种状态的图像。
问题是,在按下btn2或btn3之前,我无法保持按钮的选择状态。 btn只要按下它就会改变选定的状态图像,当我离开它时,它会变回正常状态。
在按下任何其他2个按钮之前,如何将btn1的图像保留为选定图像?
答案 0 :(得分:4)
您所做的是为“突出显示”状态设置图像,这就是当您按下它时可以看到图像的原因。
你想做的是
1)将图像设置为SELECTED状态
2)使用助手视图创建视图控制器的属性(只需将按钮拖动到标题)(在故事板上,右上角的第二个方块)
3)关于按钮操作类型的方法:
button.selected = !button.selected;
(显然将按钮替换为你命名的属性的按钮)
答案 1 :(得分:2)
这就是我的所作所为:
将其他2个按钮设为未选择
- (IBAction)buttonPressed:(id)sender
{
NSArray* buttons = [NSArray arrayWithObjects:btn1, btn2, btn3, nil];
for (UIButton* button in buttons) {
if (button == sender) {
button.selected = YES;
}
else {
button.selected = NO;
}
}
}
希望这有帮助。
干杯!
答案 2 :(得分:1)
要保持选中该按钮,您需要在按钮调用的方法中调用setSelected:YES。例如:
- (void) methodThatYourButtonCalls: (id) sender {
[self performSelector:@selector(flipButton:) withObject:sender afterDelay:0.0];
}
- (void) flipButton:(UIButton*) button {
if(button.selected)
[button setSelected:NO];
else
[button setSelected:YES];
}
我知道调用performSelector看起来有点奇怪:而不是只调用[sender setSelected:YES],但后者永远不适合我,而前者呢!
为了在按下不同的按钮时取消选择按钮,我建议添加一个实例变量,该变量包含指向当前所选按钮的指针,因此当触摸新按钮时,您可以调用flipButton:取消选择旧按钮一个相应的。所以现在你的代码应该是:
添加指向界面的指针
@interface YourViewController : UIViewController
{
UIButton *currentlySelectedButton;
}
以及这些实施方法
- (void) methodThatYourButtonCalls: (id) sender {
UIButton *touchedButton = (UIButton*) sender;
//select the touched button
[self performSelector:@selector(flipButton:) withObject:sender afterDelay:0.0];
if(currentlySelectedButton != nil) { //check to see if a button is selected...
[self flipButton:currentlySelectedButton];
currentlySelectedButton = touchedButton;
}
- (void) flipButton:(UIButton*) button {
if(button.selected)
[button setSelected:NO];
else
[button setSelected:YES];
}