以编程方式触发按钮单击事件?


126

有没有办法以编程方式触发按钮单击事件?我在UIView中放置了一个按钮,在特定情况下,我想通过代码而不是作为用户手动单击按钮。iOS开发中可能吗?请提供您的建议,并指导我该如何做。

谢谢。

Answers:


313

有点像Ken的答案,但更为灵活,因为如果您更改或添加多个按钮,它将跟踪按钮的实际操作。

[button sendActionsForControlEvents:UIControlEventTouchUpInside];

8
是否button.showsTouchWhenHighlighted = YES像实际触摸一样突出显示按钮?
chown 2012年

2
这个答案很棒,可以很容易地转换为其他控件,例如UISwitch(UIControlEventValueChanged),就我而言,这比直接调用目标/动作代码要好得多。谢谢。
约翰·埃克

不,如果button.showsTouchWhenHighlighted = YES,则不突出显示按钮。;(
Richie Hyatt

7
如果您需要突出显示,可以执行此操作。[button setHighlighted:YES]; [button sendActionsForControlEvents:UIControlEventTouchUpInside];[button setHighlighted:NO]; 而且效果很好。-rrh
Richie Hyatt

您好@zaky,如果我只想动画而不发送动作,该怎么办?

13

我遇到了与上述相同的问题。我本来可以发表评论,但是我的声誉还不够高。因此,我将发布完整答案:

[btn setHighlighted:YES];
[btn sendActionsForControlEvents:UIControlEventTouchUpInside];
[btn performSelector:@selector(setHighlighted:) withObject:NO afterDelay:0.25];

这将以编程方式按下按钮,并在看似正常的时间内突出显示它。Richie的建议不起作用,因为仅在不知不觉的时间内突出显示了按钮(如果有的话)。


它没有突出显示,绘制仅在当前代码块完成执行之后发生。这是一个很好的解决方案。
mattsven 2014年

6

为什么不仅仅执行用户按下按钮时执行的代码?

-(void)myMethod
{
   // do stuff
}

-(IBAction)myButtonClick:(id)sender
{
    [self myMethod];
}

-(void)clickMyButton
{
    [self myMethod];
    // OR
    [self myButtonClick:nil];
}

不,我的要求不是调用方法,如何以编程方式触发按钮单击事件,而不是用户手动单击时。我在UIView中以编程方式创建了UIButton,我希望在一定时间间隔后通过程序本身(而不是由用户)自动触发按钮单击事件。
Getsy 2011年

这样就不可能不合成触摸。参见cocoawithlove.com/2008/10/…。但是,您无法使用此方法将应用程序提交到App Store,因为它使用了专用API。通常用于调试目的。
埃文·穆拉斯基

您无需解释为什么需要模拟触摸而不是仅仅调用方法,但这是迄今为止最简单的方法。您的计时器动作可以调用您想要的任何方法,并且它所调用的方法可以通过更改按钮状态(选中,突出显示等)在UI中提供有关按钮被按下的反馈。如果那行不通,那就这样吧。
XJones 2011年

1

如果您要谈论的是UIButton,则只需调用与UIButton调用时相同的方法即可。例如:

[self myButtonsTargetMethod];

不,我的要求不是调用方法,如何以编程方式触发按钮单击事件,而不是用户手动单击时。我在UIView中以编程方式创建了一个UIButton,我想在一定时间间隔后通过程序本身而不是由用户自动触发按钮单击事件。
Getsy 2011年

1

是,

[_button setHighlighted:YES];
[_button sendActionsForControlEvents:UIControlEventTouchUpInside];
[_button setHighlighted:NO];

但是这里的问题是您将无法看到那些事件,因为它太快了。因此,您可以使用NSTimer尝试上面的代码。

NSTimer *quick = [NSTimer scheduledTimerWithTimeInterval:2.5 target:self selector:@selector(MeFirst:) userInfo:nil repeats:NO];

MeFirst是我创建的方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.