【问题标题】:Button triggers two actions while pressing the changed button title按钮在按下更改的按钮标题时触发两个动作
【发布时间】:2012-08-11 11:41:57
【问题描述】:

我以编程方式更改了 UIButton 的按钮标题。我还分配了一个动作来更改按钮标题。现在,当我点击按钮时,它会触发两个操作(一个按钮标题相同,一个按钮标题更改)。但是,我只想为更改的标题按钮触发一个操作。

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

【问题讨论】:

  • 对此的简单解决方案是只为按钮分配一个操作方法并将其标题文本用作参数,并在此基础上使用 if-else 语句执行不同的语句:)

标签: iphone ios5 xcode4 uibutton title


【解决方案1】:

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

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】:

    如果您为 touchupinside 控件状态的同一个按钮分配两个动作,它将始终触发两者。您应该删除第一个动作,同时添加第二个动作并删除第二个本身,并在选择器函数的末尾再次添加第一个动作。

    以下是按钮的默认动作;

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

    在actionOne中,您可以为第一个动作调用remove观察者并添加第二个。

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

    而在 actionTwo 函数中你做相反的事情

    【讨论】:

    • 嗨。谢谢您的帮助。但是当我使用不同的 UIControlState 时,另一个标题不会在同一个按钮上触发不同的操作。看看我的代码。我可能做错了什么。 if([urlresponse 状态码] == 200) { [myButton setTitle:@"Unfollow" forState:UIControlStateNormal]; //标题改变 } if ([myButton.currentTitle isEqualToString:@"Unfollow"]) { [myButton addTarget:self action:@selector(unfollowButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; }
    【解决方案3】:

    而不是设置两个条件

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

    这可能对您的情况有所帮助。

    【讨论】:

      猜你喜欢
      • 2015-07-12
      • 1970-01-01
      • 2017-12-27
      • 2022-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-22
      • 1970-01-01
      相关资源
      最近更新 更多