我正在尝试在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 :(得分:17)
我建议在添加新目标之前,首先在removeTarget
对象上调用UIbutton
,然后使用其他操作添加新目标。
答案 1 :(得分:9)
我认为它会对你有所帮助
[yourButton removeTarget:nil
action:NULL
forControlEvents:UIControlEventAllEvents];
[yourButton addTarget:self
action:@selector(yourAction:)
forControlEvents:UIControlEventTouchUpInside];
答案 2 :(得分:2)
您可以使用相同的操作目标,而不是使用两个目标。在一个目标中,您必须区分如下
-(void)btnAction
{
if(target1)
{
// code for target 1
}
else
{
// code for target 2
}
}
此处target1为BOOL
值,该值首先设置为YES
。每当您想要执行目标2代码时,请更改其值NO
。
我希望这会对你有帮助。
答案 3 :(得分:0)
我最近制作了一个应用程序并且我遇到了相同的情况,但我找到了解决问题的另一种方法,所以我决定与可能处于相同情况的人分享我的解决方案。
我将尝试解释我在这个问题的背景下所做的事情:
我在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
}
}
当然它可以应用于两个以上的功能:)