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

时间:2012-08-11 11:41:58

标签: iphone ios5 xcode4 uibutton title

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

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

3 个答案:

答案 0 :(得分: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 {

    }
}

答案 1 :(得分:0)

如果你为控制状态touchupinside的同一个按钮分配两个动作,它将始终触发两个。你应该在添加第二个动作时删除第一个动作并删除第二个动作并在选择器功能结束时再次添加第一个动作。 / p>

以下是按钮的默认操作;

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

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

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

在actionTwo功能中,您可以执行相反的操作

答案 2 :(得分:0)

而不是制造两个条件

f([urlresponse status code] == 200) 
{
[myButton setTitle:@"Unfollow" forState:UIControlStateNormal]; //title changed 

[myButton addTarget:self action:@selector(unfollowButtonPressed:) forControlEvents:UIControlEventTouchUpInside];

} 

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