我想在代码中触发按钮事件(或者方法),按钮是由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事件来调用要执行的函数....
任何人都可以就此问题提出建议吗?
谢谢你的时间!
此致
答案 0 :(得分:1)
SDK是什么意思按钮生成的?您是说该按钮是您未创建的用户界面的一部分,例如UIImagePickerController
或MPMoviePlayer
界面?
如果您发现自己试图向提供的用户界面添加行为,那么您是否需要重新考虑您的设计? 不应修改或扩展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中的某些内容,我认为您浪费时间。它不太可行,如果确实如此,它将是脆弱的。
可能还有另一种方法可以做你想做的事。