代码之家  ›  专栏  ›  技术社区  ›  Monis Manzoor

按下更改后的按钮标题时,按钮会触发两个动作

  •  0
  • Monis Manzoor  · 技术社区  · 12 年前

    我已经通过编程更改了UIButton的按钮标题。我还为更改的按钮标题分配了一个操作。现在,当我点击按钮时,它会触发两个动作(一个按钮标题相同,另一个按钮名称已更改)。然而,我只想为更改后的标题按钮触发一个操作。

    我该怎么做?如有任何帮助,我们将不胜感激。

    3 回复  |  直到 12 年前
        1
  •  1
  •   Paul.s    12 年前

    两种解决方案。在方法之间切换目标/操作,或者根据某些状态决定要做什么。

    1.

    - (void)method1:(id)sender;
    {
      [sender removeTarget:nil action:NULL forControlEvents:UIControlEventTouchUpInside];
      [sender addTarget:self action:@selector(method2:) forControlEvents:UIControlEventTouchUpInside];
    }
    
    - (void)method2:(id)sender;
    {
      [sender removeTarget:nil action:NULL forControlEvents:UIControlEventTouchUpInside];
      [sender addTarget:self action:@selector(method1:) forControlEvents:UIControlEventTouchUpInside];
    }
    

    2a中。

    - (void)buttonTapped;
    {
      if (self.someState) {
    
      } else {
    
      }
    }
    

    2b中。

    - (void)buttonTapped:(UIButton *)button;
    {
        if ([[button titleForState:UIControlStateNormal] isEqualToString:@"First title"]) {
    
        } else {
    
        }
    }
    
        2
  •  0
  •   Ilker Baltaci    12 年前

    如果您为同一个按钮分配两个操作以进行控制状态触摸,它将始终同时触发这两个操作。您应该在添加第二个操作时删除第一个操作,并删除第二个本身,然后在选择器功能结束时再次添加第一个操作。

    以下是按钮的默认操作;

    [button addTarget:self:action:@selector(actionOne)forControlEvents:UIControlStateTouchUpInside]
    

    在actionOne中,您可以为第一个操作调用remove-observer,并添加第二个操作。

        [button addTarget:self:action:@selector(actionTwo)forControlEvents:UIControlStateTouchUpInside]
    

    在实际操作中,两个函数的作用相反

        3
  •  0
  •   Rahul    12 年前

    而不是提出两个条件

    f([urlresponse status code] == 200) 
    {
    [myButton setTitle:@"Unfollow" forState:UIControlStateNormal]; //title changed 
    
    [myButton addTarget:self action:@selector(unfollowButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
    
    } 
    

    这可能对你的案子有帮助。