2010-02-09 1 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? Вы имеете в виду, что эта кнопка является частью пользовательского интерфейса, не созданного вами, например, интерфейсов UIImagePickerController или MPMoviePlayer?

Если вы пытаетесь добавить поведение к предоставленным пользовательским интерфейсам, возможно, вам нужно переосмыслить свой дизайн? Пользовательские интерфейсы, предоставляемые API в SDK, не должны быть изменены или расширены. Вы должны создать свои собственные интерфейсы, которые могут выглядеть похожими, если вы хотите их.

Я не уверен, планируете ли вы представить это в App Store, когда закончите, но знаете, что в прошлом были случаи, когда автоматизация событий, таких как нажатия кнопок и события касания, привела к тому, приложения отклоняются из App Store.

Некоторые заметные случаи были приложениями, использующими популярную библиотеку Three20, которая имитировала события касания для целей тестирования. Просто тот факт, что симулированные события касания остались в коде (даже если они не использовались), была достаточной причиной для того, чтобы яблоко отклоняло приложения, используя Three20.

+0

+1 Apple, безусловно, сбит приложение, которое захватывает интерфейс и позволяет приложению переопределять выбор пользователя в стандартном элементе управления. – TechZen

+0

да, я хочу расширить UIImagePickerController, я думаю, что это не противоречит правилу Apple .... ну, мы можем игнорировать проблему, я просто хочу знать, как запустить событие, я имею в виду, как вызвать оригинальное событие кнопки или метод кнопки ... – iXcoder

+0

Вы не можете изменить интерфейс UIImagePickerController. Нет поддерживаемого способа автоматизации управляющих событий, таких как нажатия кнопок или события касания. Моим советом было бы создать представление, похожее на UIImagePickerController, и реализовать вашу функциональность. – Jasarien

0

Вы должны позвонить allTargets на кнопку и посмотреть, вернет ли она желаемую цель. Если этого не произойдет, ни один из общедоступных методов API не позволит вам ударить по этой цели, и вы тратите свое время.

Яблоко с некоторыми элементами управления и разработчиками не может переопределить это.

Edit01:

UIThreePartButton является частным классом. Если вы используете его методы, ваше приложение будет отклонено магазином приложений.

Однако я нашел источник, который утверждает, что является заголовком для него и его суперклассов. Вы можете увидеть, сможете ли вы что-нибудь найти.

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

Даже если вы не заботитесь об отказе, если конечная цель состоит в том, чтобы получить доступ или переопределить что-то в API, я думаю, что ваши тратить время. Он вряд ли будет работать, и он будет хрупким, если это произойдет.

Возможно, есть еще один способ сделать то, что вы хотите.

+0

.... методы тоже не работают ... кнопка супер класс UIThreePartButton, я думаю, что это также базовый UIButton, я не думаю, что это глупая идея, потому что метод 'sendActionsForControlEvents' работает, когда я его называю, новый метод, который я добавляю к кнопке, выполняется ... – iXcoder

+0

Нет никакой гарантии, что внутренние методы Apple будут отвечать публичному API и наоборот. – TechZen

Смежные вопросы