2012-01-09 233 views
5

我试图改变行动对于UIButton的iOS中应用。我下面的代码是否可以更改UIButton的操作?

button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 

    [button addTarget:self action:@selector(aMethodShow:) forControlEvents:UIControlEventTouchDown]; 

    [button setTitle:@"Show View" forState:UIControlStateNormal]; 

    button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0); 

    [view addSubview:button]; 

特别是部分我想改变操作此按钮。所以我这样做

[button addTarget:self action:@selector(aMethodHide:) forControlEvents:UIControlEventTouchDown]; 
[button setTitle:@"Hide View" forState:UIControlStateNormal]; 

遗憾的是此代码备注工作?

+0

aMethodShow工作首次? aMethodHide在你改变它时不工作? – 2012-01-09 06:20:21

+0

两个动作都采取相同的事件(点击)的按钮,我如何删除第一个目标。 – 2012-01-09 06:39:10

+0

你的意思是说,当你点击时,两个方法都被调用? – 2012-01-09 06:41:03

回答

17

我建议在添加新目标之前,首先调用removeTargetUIbutton对象,然后用其他动作添加新目标。

+0

它的工作好,为什么这个动作调用相同的事件 – 2012-01-09 06:47:25

2

您可以使用相同的操作目标,而不是使用两个目标。在一个目标,你必须区分像下面

-(void)btnAction 
{ 
     if(target1) 
      { 
      // code for target 1 
      } 

     else 
     { 
      // code for target 2 
     } 

} 

这里是目标1 BOOL值值首先设置为YES。每当你想执行目标2代码时,改变它的值NO

我希望这将帮助你。

+0

如果我不想检查的条件,如果我设置目标不止一次与不同的选择器(showButton,HideButton等)所有操作同时调用..为什么这个事情? – 2012-01-09 06:55:07

0

我最近做了一个应用程序和我有同样的情况,但我发现了另一种方式来解决这个问题,所以我决定分享我的人谁可能是在同样的情况的解决方案。

我会尽力解释我做了什么这个问题的背景:

  • 我添加了一个标签,我用的是button需要调用一个函数有关它buttonaMethodShow:例如)。

  • button始终调用相同的功能(例如,callSpecificFunc:)。什么callSpecificFunc:所做的就是调用两个函数aMethodShow:aMethodHide当前button标签根据。

  • button需要调用不同功能的特定部分中,我只更改button的标签。

事情是这样的:

NSInteger tagOne = 1000; //tag associated with 'aMethodShow' func 
NSInteger tagTwo = 1001; //tag associated with 'aMethodHide' func 

button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
[button addTarget:self action:@selector(callSpecificFunc:) forControlEvents:UIControlEventTouchDown]; 
[button setTitle:@"Show View" forState:UIControlStateNormal]; 
button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0); 
[view addSubview:button]; 

... 
// in some part of code, if we want to call 'aMethodShow' function, 
// we set the button's tag like this 
button.tag = tagOne 

... 

//Now, if we want to call 'aMethodHide', just change the button's tag 
button.tag = tagTwo 

... 

-(void) callSpecificFunc:(UIButton*)sender 
{ 
    NSInteger tagOne = 1000; 
    NSInteger tagTwo = 1001; 

    if([sender tag] == tagOne){ 
     //do whatever 'aMethodShow' does 
    }else { 
     //do whatever 'aMethodHide' does 
    } 
} 

当然,它可以应用于超过2个功能:)

8

我认为它会帮助你

[yourButton removeTarget:nil 
       action:NULL 
    forControlEvents:UIControlEventAllEvents]; 

[yourButton addTarget:self 
       action:@selector(yourAction:) 
    forControlEvents:UIControlEventTouchUpInside]; 
相关问题