【问题标题】:Cannot unhighlight unbutton无法取消突出显示取消按钮
【发布时间】:2013-08-17 19:45:44
【问题描述】:

我有一些关于 uibutton 的问题。我希望一个按钮在按下时突出显示,但在按下其他按钮时取消突出显示,但我无法让上一个按钮取消突出显示。有人可以请教吗?

@interface ViewController : UIViewController
{
    UIButton *button1;
    UIButton *button2;
}
@property (nonatomic, retain) IBOutlet UIButton *button1;
@property (nonatomic, retain) IBOutlet UIButton *button2;

-(IBAction)button1:(id)sender;
-(IBAction)button2:(id)sender;
-(void) highlightButton: (UIButton *) button;
-(void) unhighlightButton: (UIButton *) button;
@end


@interface ViewController ()
@end
@implementation ViewController
@synthesize button1, button2;

-(IBAction)button1:(id)sender
{

    [self performSelector:@selector(highlightButton:) withObject:sender afterDelay:0.0];
    [button2 performSelector:@selector(unhighlightButton:) withObject:button2 afterDelay:0.0];
}

-(IBAction)button2:(id)sender
{
    [self performSelector:@selector(highlightButton:) withObject:sender afterDelay:0.0];
    [button1 performSelector:@selector(unhighlightButton:) withObject:button1 afterDelay:0.0];
}

-(void) highlightButton:(UIButton *)button
{
    [button setHighlighted:YES];
}

-(void) unhighlightButton:(UIButton *)button
{
    [button setHighlighted:NO];
}

@end

【问题讨论】:

    标签: iphone uibutton highlighting


    【解决方案1】:

    由于您使用的是属性,请通过两种方式更改这两行:

    [self performSelector:@selector(unhighlightButton:) withObject:self.button2 afterDelay:0.0];
    

    [self performSelector:@selector(unhighlightButton:) withObject:self.button1 afterDelay:0.0];
    

    1) 应使用“self.”引用属性

    2) 您正在调用视图控制器中的方法“unhighlightButton:”,因此您需要在“self”而不是“button”上调用它。 “button”通过“withObject:”参数传递。

    你为什么要使用“performSelector”方法呢?

    您可以重写其中一种操作方法:

    -(IBAction)buttonTouched:(id)sender
    {
        [sender setHighlighted: YES];
        if(sender == self.button1)
        {
           [self.button2 setHighlighted: NO];
        } else {
           [self.button1 setHighlighted: NO];
        }
    }
    

    并将两个按钮都指向那个 IBAction。

    【讨论】:

    • 嗨迈克尔,谢谢,但我试过这条线,但它不起作用。这条线应该驻留在 IBAction 方法中还是其他地方?我想如果IBAction方法中的“self”指向“sender”,在这种情况下指向按下的按钮(button1或button2)所以另一个按钮不被称为“self”?如果我错了,请纠正我。
    • 如果你在 "unhighlightButton:" 方法中设置了 Xcode 断点,它会命中吗?
    • 是的。它被击中了。
    • 检查并确定“unhighlightButton”中的按钮不为零。
    • 检查我的答案@BarnyLui
    【解决方案2】:

    首先检查IBOutletIBAction 连接是否正确连接。

    -(IBAction)button1:(id)sender
        {
            [self performSelector:@selector(highlightButton:) withObject:sender afterDelay:0.0];
            [self performSelector:@selector(unhighlightButton:) withObject:button2 afterDelay:0.0];
        }
    
        -(IBAction)button2:(id)sender
        {
            [self performSelector:@selector(highlightButton:) withObject:sender afterDelay:0.0];
            [self performSelector:@selector(unhighlightButton:) withObject:button1 afterDelay:0.0];
        }
    
        -(void) highlightButton:(UIButton *)button
        {
            [button setHighlighted:YES];
        }
    
        -(void) unhighlightButton:(UIButton *)button
        {
            [button setHighlighted:NO];
        }
    

    【讨论】:

    • 我赞成你的,因为它非常简洁明了。
    • 我收到一条警告消息“button1 的本地声明隐藏了实例变量”并且 button1 没有变成绿色。可以吗?
    • 嗨 Rajneesh,我试过了,但它没有突出显示按钮。我的声明中是否缺少某些内容?
    • 嗨 Rajneesh,pressedButton 似乎无法突出显示按钮。
    • 先告诉我你的确切要求……你可以用 setSelected 试试这个
    【解决方案3】:

    你也可以使用 UIButton 的 selected 属性: 对于两个按钮选择器将是相同的“buttonTouched”

    -(IBAction)buttonTouched:(id)sender {
    
         button1.selected = NO;
         button2.selected = NO;
    
         if (sender == button1) {
              button1.selected = YES;
         } else if (sender == button2) {
              button2.selected = YES;
         }
    }
    

    试试这个。

    【讨论】:

    • 但是对于两个按钮,您必须为所选状态设置不同的图像。
    【解决方案4】:

    您可以执行以下操作...

     -(IBAction)button1:(id)sender
     {
    
     button1.highlighted = YES;
      button2.highlighted = NO;
     }
    
     -(IBAction)button2:(id)sender
     {
      button2.highlighted = YES;
      button1.highlighted = NO;
     }
    

    让我知道它是否有效!!!!

    编码愉快!!!!

    【讨论】:

    • 嗨 Nirav,它不起作用 :( 它没有突出显示。我尝试将其更改为 self.button1.highlighted 和 self.button2.highlighted 但它仍然不会突出显示。
    • 我应该吗?我没有使用任何自定义按钮,而是使用圆形矩形按钮。
    • 是的,我做到了。实际上我尝试了这个命令并且它起作用了:- -(IBAction)button1:(id)发件人{[self performSelector:@selector(highlightButton:)withObject:sender afterDelay:0.0];} -(void)highlightButton:(UIButton *)按钮 {button.highlighted = YES;}
    猜你喜欢
    • 2015-09-27
    • 2020-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多