iPhone,如何以编程方式触发按钮事件

时间:2010-02-09 11:42:34

标签: iphone

我想在代码中触发按钮事件(或者方法),按钮是由iPhone SDK生成的,我无法更新它,所以我将动作添加到按钮,代码如下:

[theButton addTarget:self action:@selector(onButtonEvent:) 
       forControlEvents:UIControlEventAllTouchEvents];

 -(void) onButtonEvent:(id)sender
{   
    AppTrace2(self, @"onButtonEvent", sender);   
}

当我点击按钮时,应用程序将执行由iPhone sdk生成的函数,同时将执行新方法'onButtonEvent',然后我尝试添加一些代码,如下所示:

[theButton  sendActionsForControlEvents: UIControlEventTouchDown];
[theButton  sendActionsForControlEvents: UIControlEventTouchDownRepeat];
[theButton  sendActionsForControlEvents: UIControlEventTouchDragInside];
[theButton  sendActionsForControlEvents: UIControlEventTouchDragOutside];

[theButton  sendActionsForControlEvents: UIControlEventTouchDragEnter];
[theButton  sendActionsForControlEvents: UIControlEventTouchDragExit];
[theButton  sendActionsForControlEvents: UIControlEventTouchDragInside];
[theButton  sendActionsForControlEvents: UIControlEventTouchDragOutside];


[theButton  sendActionsForControlEvents: UIControlEventTouchUpInside];
[theButton  sendActionsForControlEvents:  UIControlEventTouchUpOutside];
[theButton sendActionsForControlEvents:UIControlEventTouchDown];
[theButton sendActionsForControlEvents:UIControlEventAllEvents];

但它没有调用iphone sdk生成的原始函数,虽然新的方法'onButtonEvent'也是在执行sendActionsForControlEvents时执行的....  我的目标是调用原始函数... sdk没有提供这方面的提示,所以我必须模拟tap事件来调用要执行的函数....

任何人都可以就此问题提出建议吗?

谢谢你的时间!

此致

2 个答案:

答案 0 :(得分:1)

SDK是什么意思按钮生成的?您是说该按钮是您未创建的用户界面的一部分,例如UIImagePickerControllerMPMoviePlayer界面?

如果您发现自己试图向提供的用户界面添加行为,那么您是否需要重新考虑您的设计? 不应修改或扩展SDK中API提供的用户界面。您应该创建自己的界面,如果您愿意,可以看起来类似。

我不确定你是否计划在完成后将其提交到App Store,但是我知道过去曾出现过自动化事件的情况,例如按钮按下和触摸事件导致了应用程序被App Store拒绝。

一些值得注意的案例是使用流行的Three20库的应用程序,模拟用于测试目的的触摸事件。简单地说,模拟触摸事件留在代码中的事实(即使它们没有被使用)也足以让苹果拒绝使用Three20的应用程序。

答案 1 :(得分:0)

您应该在按钮上调用allTargets,看它是否返回您想要的目标。如果没有,那么任何公共API方法都不会让你达到目标而浪费你的时间。

Apple硬连接了一些控件,开发人员无法覆盖它。

Edit01:

UIThreePartButton是一个私有类。如果您使用其方法,您的应用将被应用商店拒绝。

但是,我确实找到了一个声称是它及其超类的标题的源代码。你可以看看你是否能找到任何东西。

http://ericasadun.com/iPhoneDocs/_u_i_three_part_button_8h-source.html

即使您不关心拒绝,如果您的最终目标是访问或覆盖API中的某些内容,我认为您浪费时间。它不太可行,如果确实如此,它将是脆弱的。

可能还有另一种方法可以做你想做的事。