对单个按钮执行三个不同的操作

Perform three different action for a single button

我想对一个按钮执行三种不同的操作。我在 google 中浏览过,它也显示了一些不同的选项,但这些选项没有帮助。

我已经在 CustomUIButton 中声明了 NSInteger,即在 IBAction 中单击并初始化为 0。 这是代码。

-(void)changeStudentAction:(id)sender
{
    CustomUIButton *button=sender;
    NSInteger flag = 0;
    button.click=0;
    if(button.click==0)
    {
        button.click=1;
        [button setSelected:NO];
        [button setBackgroundImage:[UIImage imageNamed:@"Absent_on_coloured.png"] forState:UIControlStateNormal];
        flag=0;
    }
    else if (button.click==1)
    {
        button.click=2;
        [button setSelected:YES];
        [button setBackgroundImage:[UIImage imageNamed:@"Present_on_coloured.png"] forState:UIControlStateNormal];
        flag=1;
    }
    else if (button.click==3)
    {
        button.click=0;
        [button setBackgroundImage:[UIImage imageNamed:@"Late_on_coloured.png"] forState:UIControlStateNormal];
        [button setSelected:YES];
        flag=3;
    }

}

但它不起作用。谁能告诉我哪里做错了。

您正在为每个操作设置 button.click = 0。 所以每次你点击它都会被设置为零。 您可以在视图控制器中保留一个单独的变量来计数,而不是单击 属性 按钮。希望这有帮助:-)

根据您的代码, 它一直在进行

if(button.click==0)
{
button.click=1;
[button setSelected:NO];
[button setBackgroundImage:[UIImage imageNamed:@"Absent_on_coloured.png"] forState:UIControlStateNormal];
flag=0;
}

我会给你更好的建议而不是 "click" 你可以使用 "tag" 选项,这是 uibutton 的 属性 选项。 首先,您必须在 .h 文件上定义一个自定义按钮,然后在 - (void)viewDidLoad 中设置标签 = 0 方法。

CustomUIButton *button;
        NSInteger flag = 0;
        button.click=0;  

以这种方式使用它,或者从所有此类问题中简单地使用一些其他变量作为 因为每次这个函数每次都调用它的零所以把它放在这个函数之外并使用它

  NSInteger flag = 0;
  int counter = 0;
-(void)changeStudentAction:(id)sender
    {

    if(counter ==0)
    {
        counter =1;
        [button setSelected:NO];
        [button setBackgroundImage:[UIImage imageNamed:@"Absent_on_coloured.png"] forState:UIControlStateNormal];
        flag=0;
    }
    else if (counter ==1)
    {
        counter =2;
        [button setSelected:YES];
        [button setBackgroundImage:[UIImage imageNamed:@"Present_on_coloured.png"] forState:UIControlStateNormal];
        flag=1;
    }
    else if (counter ==3)
    {
        counter =0;
        [button setBackgroundImage:[UIImage imageNamed:@"Late_on_coloured.png"] forState:UIControlStateNormal];
        [button setSelected:YES];
        flag=3;
    }

}

在开始按钮标签为零然后改变如下

-(void)changeStudentAction:(id)sender{
     CustomUIButton *button=sender;
     NSInteger flag = 0;
     if(button.tag==0)
     {
         button.tag=1;
     }     
     else if (button.tag==1)
     {
        button.tag=2;
     }
     else if (button.click==3)
     {
          button.tag=0;
     }
}

全局定义 button.click=0;,因此它的值最初为零,之后会增加。

@interface yourclass : superclass
{
   int click;
}


- (void)viewDidLoad{

      click=0;

}

-(void)changeStudentAction:(id)sender
{
CustomUIButton *button=sender;
NSInteger flag = 0;

if(click==0)
{
    click=1;
    [button setSelected:NO];
    [button setBackgroundImage:[UIImage imageNamed:@"Absent_on_coloured.png"] forState:UIControlStateNormal];
    flag=0;
}
else if (button.click==1)
{
    click=2;
    [button setSelected:YES];
    [button setBackgroundImage:[UIImage imageNamed:@"Present_on_coloured.png"] forState:UIControlStateNormal];
    flag=1;
}
else if (button.click==3)
{
    click=0;
    [button setBackgroundImage:[UIImage imageNamed:@"Late_on_coloured.png"] forState:UIControlStateNormal];
    [button setSelected:YES];
    flag=3;
}

}

请尝试以下代码可能会解决您的问题。

-(void)changeStudentAction:(id)sender
{
    CustomUIButton *button=sender;
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:0.2];
       [button setBackgroundImage:[UIImage imageNamed:@"Absent_on_coloured.png"] forState:UIControlStateNormal];

        [UIView setAnimationDuration:0.4];
        [button setBackgroundImage:[UIImage imageNamed:@"Present_on_coloured.png"] forState:UIControlStateNormal];

        [UIView setAnimationDuration:0.6];
        [button setBackgroundImage:[UIImage imageNamed:@"Late_on_coloured.png"] forState:UIControlStateNormal];

        [UIView commitAnimations];

}