2

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

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

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

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

请问有什么帮助吗?

4

4 回答 4

3

First of all its not apple bugs. It should be handle manually. So follow these step

First make your global instance of your button then do this

.h file

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

.m file

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

-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    self.btn.userInteractionEnabled = YES;
}
于 2015-06-22T05:43:29.560 回答
2

取一个全局布尔标志,如“isItDone”,或者在单例类中声明。

  1. 在“myFunction”中将其设置为 false
  2. 您在该类的“ViewDidAppear”方法中将哪个视图控制器推送到该函数上,并将其设置为 true。

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

于 2015-06-22T05:15:51.470 回答
1

我想这会对你有所帮助。

像这样更改您的调用功能

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

并像这样调用你的函数

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

如果你想存储选择以防你回到视图控制器,那么你只需要保留一个布尔标志来存储它是否被点击一次。

于 2015-06-22T05:24:33.360 回答
1

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

button.userInteractionEnabled = YES;

当你点击按钮集时,

button.userInteractionEnabled = NO;
于 2015-06-22T05:48:43.837 回答