多次点击 UIButton 多次触发 Target 函数

Multiple clicks on UIButton trigger Target function multiple times

我有一个 UIButton。我绑定了一个目标如下

[button addTarget:self action:@selector(myFunction) 
                forControlEvents:UIControlEventTouchUpInside];

当我快速多次单击我的按钮时,它会多次调用目标函数。 在点击按钮上,我展示了一个新的视图控制器。 当我快速单击 3 次时,我的新视图控制器将显示 3 次。

这是愚蠢的事情。一旦视图已转移到新的视图控制器,再次触发该功能有什么意义。为什么地狱苹果会做出如此愚蠢的事情?

有什么帮助吗?

取一个全局 bool 标志,如 "isItDone" 或它在单例中声明 class。

  1. 在"myFunction"中设置为假
  2. 您在那个 class 的 "ViewDidAppear" 方法设置为 true 的那个函数上推送哪个视图控制器。

它会帮助你。 我有同样的问题,使用一个全局变量来管理它是一个很好的解决方案。

我想这会对你有所帮助。

像这样更改您的调用函数

- (IBAction)myFunction:(id)sender
{
    UIButton *button = (UIButton*)sender;
    button.userInteractionEnabled = NO;
}

并像这样调用你的函数

[button addTarget:self action:@selector(myFunction:) 
            forControlEvents:UIControlEventTouchUpInside];

如果您想在返回视图控制器时存储选择,那么您只需要保留一个布尔标志来存储它是否被单击一次。

首先,它不是 apple bug。应该手动处理。所以按照这些步骤

首先创建按钮的全局实例,然后执行此操作

.h 文件

@property (weak, nonatomic) IBOutlet UIButton *btn;

.m 文件

- (IBAction)myFunction:(id)sender
{
    self.btn.userInteractionEnabled = NO;
}

-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    self.btn.userInteractionEnabled = YES;
}

将 IBOutlet 设置为您的按钮,在 viewWillAppear 方法中写入,

button.userInteractionEnabled = YES;

当您点击按钮组时,

button.userInteractionEnabled = NO;