2010-02-09 94 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

相關問題