是否可以更改UIButton的操作?
我试图改变行动对于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];
遗憾的是此代码备注工作?
我建议在添加新目标之前,首先调用removeTarget
对UIbutton
对象,然后用其他动作添加新目标。
它的工作好,为什么这个动作调用相同的事件 – 2012-01-09 06:47:25
您可以使用相同的操作目标,而不是使用两个目标。在一个目标,你必须区分像下面
-(void)btnAction
{
if(target1)
{
// code for target 1
}
else
{
// code for target 2
}
}
这里是目标1 BOOL
值值首先设置为YES
。每当你想执行目标2代码时,改变它的值NO
。
我希望这将帮助你。
如果我不想检查的条件,如果我设置目标不止一次与不同的选择器(showButton,HideButton等)所有操作同时调用..为什么这个事情? – 2012-01-09 06:55:07
我最近做了一个应用程序和我有同样的情况,但我发现了另一种方式来解决这个问题,所以我决定分享我的人谁可能是在同样的情况的解决方案。
我会尽力解释我做了什么这个问题的背景:
我添加了一个标签,我用的是
button
需要调用一个函数有关它button
(aMethodShow:
例如)。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个功能:)
我认为它会帮助你
[yourButton removeTarget:nil
action:NULL
forControlEvents:UIControlEventAllEvents];
[yourButton addTarget:self
action:@selector(yourAction:)
forControlEvents:UIControlEventTouchUpInside];
aMethodShow工作首次? aMethodHide在你改变它时不工作? – 2012-01-09 06:20:21
两个动作都采取相同的事件(点击)的按钮,我如何删除第一个目标。 – 2012-01-09 06:39:10
你的意思是说,当你点击时,两个方法都被调用? – 2012-01-09 06:41:03