2010-02-09 96 views
1

我想在代码中触发一个按钮事件(或者可能是方法),该按钮是由iPhone SDK生成的,我无法更新它,因此我将该操作添加到按钮中,代码喜欢如下:iPhone,如何以编程方式触发按钮事件

[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事件来调用函数执行....

任何人都可以给这个问题提示?

谢谢你的时间!

问候

回答

1

你是什么意思的按钮是由SDK产生的?您的意思是该按钮是不是由您创建的用户界面的一部分,例如UIImagePickerControllerMPMoviePlayer界面?

如果您发现自己想要向提供的用户界面添加行为,那么您可能需要重新考虑您的设计? 由SDK中的API提供的用户界面不应该被修改或扩展。你应该创建你自己的接口,如果你想要它们,可以看起来很相似。

我不确定您是否计划在完成后将此内容提交给App Store,但是请注意,过去曾出现过自动执行事件(例如按钮按下按钮和触摸事件)的情况应用程序从App Store中被拒绝。

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

+0

+1 Apple肯定会击落一个劫持界面的应用程序,并使应用程序可以覆盖用户在标准控件中的选择。 – TechZen 2010-02-09 16:18:21

+0

是的,我想扩展UIImagePickerController,我认为这不符合Apple Rule。 好吧,我们可以忽略这个问题,我只想知道如何触发事件,我的意思是如何调用按钮的原始事件或按钮的方法...... – iXcoder 2010-02-09 16:23:42

+0

您不能修改UIImagePickerController的接口。自动控制事件没有支持的方式,例如按下按钮或触摸事件。我的建议是创建一个类似于UIImagePickerController的视图并在其上实现您的功能。 – Jasarien 2010-02-09 19:50:02

0

您应该在按钮上调用allTargets并查看它是否返回所需的目标。如果没有,那么公共API方法都不会让你达到这个目标,而且你正在浪费你的时间。

苹果硬连线的一些控件和开发人员无法重写。

Edit01:

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

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

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

即使你不关心排斥反应,如果你的最终目标是进入或API中覆盖的东西,我觉得你浪费你的时间。它不太可能工作,如果它确实是脆弱的。

有可能是另一种方法来做你想做的。

+0

....方法也行不通... 按钮超类是UIThreePartButton,我认为它也是基UIButton,我不认为这是愚蠢的想法,因为方法'sendActionsForControlEvents'是工程,当我调用它时,我添加到按钮中的新方法将被执行...... – iXcoder 2010-02-09 16:36:09

+0

无法保证Apple的内部方法会响应公共API,反之亦然。 – TechZen 2010-02-09 23:02:21

相关问题