Xcode 保持一个UIButton按下(状态已选择/突出显示),直到按下另一个按钮?
我的视图控制器底部有3个按钮,btn1 btn2 btn3,我用它们代替选项卡栏,因为不可能根据我的要求完全自定义选项卡栏 现在的问题是,当按下btn1时,我希望它将其图像更改为灰色矩形,而不是正常状态的图像。我已使用出口的setimage和uicontrol状态属性为我为按钮btn1Outlet声明的出口中的两种状态设置了图像 问题是,在按下btn2或btn3之前,我无法保持按钮处于选中状态。btn one仅在按下时才会更改为选定状态图像,在我离开它的那一刻,它会更改回其正常状态Xcode 保持一个UIButton按下(状态已选择/突出显示),直到按下另一个按钮?,xcode,ios5,uibutton,uitabbarcontroller,Xcode,Ios5,Uibutton,Uitabbarcontroller,我的视图控制器底部有3个按钮,btn1 btn2 btn3,我用它们代替选项卡栏,因为不可能根据我的要求完全自定义选项卡栏 现在的问题是,当按下btn1时,我希望它将其图像更改为灰色矩形,而不是正常状态的图像。我已使用出口的setimage和uicontrol状态属性为我为按钮btn1Outlet声明的出口中的两种状态设置了图像 问题是,在按下btn2或btn3之前,我无法保持按钮处于选中状态。btn one仅在按下时才会更改为选定状态图像,在我离开它的那一刻,它会更改回其正常状态 在按下其他两
在按下其他两个按钮中的任何一个之前,如何将btn1的图像保持为选定图像?要保持按钮处于选定状态,需要在按钮调用的方法中调用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];
}
您所做的是为“突出显示”状态设置一个图像,这就是为什么当您按下它时,您可以看到您的图像 你想做的是 1) 将图像设置为选定状态 2) 使用助手视图为视图控制器创建属性(只需控制并将按钮拖动到标题处)(在故事板上,右上角的第二个正方形上) 3) 在按钮操作类型的方法上:
button.selected = !button.selected;
(显然,将按钮替换为您命名的属性)以下是我所做的:
- (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;
}
}
}
干杯 感谢您的帮助,但当我按下按钮时,应用程序崩溃,出现错误未捕获异常,无法识别的选择器发送到实例。请确保在为按钮设置目标时,将选择器称为“methodThatYourButtonCalls:”而不是“methodThatYourButtonCalls”(请注意,如果计划使用:(id),则必须使用分号)谢谢,这很有效,但解决了我问题的一部分,即按钮确实改变了图像并保持不变,但只有当再次单击按钮时,它才会变回正常状态图像,而不是在单击任何其他按钮时。当然,这些按钮互不相关,你必须自己做逻辑我想在按钮2的操作中添加按钮1.selected=NO;button3.selected=NO;Oh k,谢谢,我想知道这样做是否正确。现在这样做了吗。谢谢。顺便问一下,据你所知,如果我使用这种方法而不是选项卡栏,应用程序审批是否会出现问题?只要没有,但可以自定义选项卡栏。