首页 文章

如何以编程方式假冒触摸事件到UIButton?

提问于
浏览
171

我很重要的是,我尽可能地高涨了 UI 链 . 所以,我想要做的是以编程方式触发按钮按下,就像用户按下 GUI 中的按钮一样 .

(是的,是的 - 我可以调用 IBAction 选择器,但是,再次,这个特定应用程序的性质使得重要的是我伪造实际的按钮按下,这样就可以从按钮调用 IBAction 本身 . )

这样做的首选方法是什么?

6 回答

  • 3

    事实证明

    [buttonObj sendActionsForControlEvents: UIControlEventTouchUpInside];
    

    在这种情况下,我得到了我需要的东西 .

    EDIT: 不要忘记在主线程中执行此操作,以获得类似于用户按下的结果 .


    For Swift 3:

    buttonObj.sendActions(for: .touchUpInside)

  • 6

    对Swift的这个答案的更新

    buttonObj.sendActionsForControlEvents(.TouchUpInside)
    

    EDIT :针对Swift 3进行了更新

    buttonObj.sendActions(for: .touchUpInside)
    
  • 5

    如果你想进行这种测试,你会喜欢iOS 4中的UI自动化支持 . 你可以很容易地编写JavaScript来模拟按键等,尽管文档(特别是入门部分)有点疏 .

  • 439

    在这种情况下, UIButton 派生自 UIControl . 这适用于从 UIControl 派生的对象 .

    我想在特定用例上重用“ UIBarButtonItem ”操作 . 这里, UIBarButtonItem 不提供方法 sendActionsForControlEvents:

    但幸运的是, UIBarButtonItem 具有目标和行动的属性 .

    if(notHappy){        
             SEL exit = self.navigationItem.rightBarButtonItem.action;
             id  world = self.navigationItem.rightBarButtonItem.target;
             [world performSelector:exit];
     }
    

    这里, rightBarButtonItem 的类型为 UIBarButtonItem .

  • 3

    对于Xamarin iOS

    btnObj.SendActionForControlEvents(UIControlEvent.TouchUpInside);
    

    Reference

  • 49

    斯威夫特3:

    self.btn.sendActions(for: .touchUpInside)
    

相关问题