iPhone, как программно вызвать событие кнопки - PullRequest
1 голос
/ 09 февраля 2010

Я хочу запустить событие кнопки (или, может быть, метод) в коде, кнопка была сгенерирована 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 ]

1 голос
/ 09 февраля 2010

Что вы имеете в виду, кнопка была сгенерирована SDK? Вы имеете в виду, что кнопка является частью пользовательского интерфейса, не созданного вами, например интерфейсы UIImagePickerController или MPMoviePlayer?

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

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

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

0 голосов
/ 09 февраля 2010

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

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

Edit01:

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...