2013-03-29 4 views
0

В проекте ios есть множество файлов viewcontroller, разработанных многими людьми в течение определенного периода времени. Я запустил симулятор и перешел на различные экраны. В середине навигации я хочу найти, какой метод действия вызывается при нажатии кнопки на экране. Как легко найти его без значительного анализа проекта и без использования контрольных точек.Как обнаружить файл «viewcontroller», содержащий целевое действие, соответствующее нажатию кнопки?

ответ

1

Создать категорию UIButton и убедитесь, что он включен в вашу цель:

UIButton + actionsFinder.h

#import <UIKit/UIKit.h> 

@interface UIButton (actionsFinder) 

@end 

UIButton + actionsFinder.m

#import "UIButton+actionsFinder.h" 

@implementation UIButton (actionsFinder) 


-(void)sendAction:(SEL)action to:(id)target forEvent:(UIEvent *)event { 
    NSLog(@"%s %d %s %@ %@\n %@\n %@", __FILE__, __LINE__, __PRETTY_FUNCTION__, @"Button clicked!\n", NSStringFromSelector(action), [target description], [event description]); 
    [super sendAction:action to:target forEvent:event]; 
} 

@end 

Когда любая кнопка отправляет любое действие, вы увидите что-то вроде этого на консоли:

/Users/username/appname/targetname/UIButton+actionsFinder.m 15 -[UIButton(actionsFinder) sendAction:to:forEvent:] Button clicked! 

onButton: 

<MCViewController: 0x715e280> 

<UITouchesEvent: 0x7639f40> timestamp: 23516.9 touches: {(<UITouch: 0x7169240> phase: Ended tap count: 1 window: <UIWindow: 0x754e6d0; frame = (0 0; 320 568); autoresize = W+H; layer = <UIWindowLayer: 0x754e7d0>> view: <UIRoundedRectButton: 0x7161290; frame = (123.5 38; 73 44); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x71613b0>> location in window: {149, 81.5} previous location in window: {149, 81.5} location in view: {25.5, 23.5} previous location in view: {25.5, 23.5} 

Обратите внимание, что вы получите следующую информацию: имя

  • селектора в классе назначения onButton: который я объявивший и связанный с кнопками onTouchUpInside действия события, фактический метод подписью выглядит как

    -(IBAction)onButton:(id)button;

  • целевое описание показывает класс назначения: MCViewController

  • описание события, которое обожженного действие

Я использовал __FILE_ _ __LINE__, __PRETTY_FUNCTION__ макросы, чтобы увидеть, где NSLog сообщение приходящий из.

+0

Именно то, что мне нужно. Большое спасибо :-) –

0

Вы можете щелкнуть правой кнопкой на кнопке, чтобы увидеть: enter image description here

Какой селектор добавляется конкретного сенсорного события.

Или Печать NSLog(@"%s", __PRETTY_FUNCTION__); В каждой функции, поэтому этот журнал будет печатать имя функции всякий раз, когда эта функция будет вызвана.

+0

responsesToSelector используется для определения того, реагирует ли кнопка на действие или нет (во время выполнения)? Однако мой вопрос - это совсем другое. –

+0

Когда я знаю диспетчер представлений файла, я могу пойти и проверить touchupinside. Я хочу знать, как найти этот viewcontroller в большом проекте, без большого анализа –

+0

Да, NSLog (__ Pretty_Function__); это хорошая идея, но не каждый мог бы добавить такой журнал в свои методы действий все время в существующем проекте, когда многие люди работают в одном проекте на разных экранах. –

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