Найти, какое действие вызывается кнопкой в ​​конструкторе интерфейса в режиме отладки - PullRequest
0 голосов
/ 26 апреля 2018

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

Как я могу это сделать?

Иерархия представления показывает только общие классы, но не конкретные классы в проекте.Например, я могу напечатать описание кнопки, но это дает мне только адрес памяти и фрейм.Кроме того, печать superview только дает мне другой адрес памяти и фрейм.

Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 26 апреля 2018

Если в вашей кнопке есть текст, вы можете выполнить поиск по тексту кнопки в Find Navigator и получить некоторый прогноз, а если у вас есть изображение на кнопке, вы можете найти имя изображения в активах. Этим вы можете свести к минимуму поиск. Если вы найдете какой-либо ярлык, содержащий статический текст, найдите текст! Может быть, это может помочь вам!

0 голосов
/ 26 апреля 2018

Я продолжал пробовать консоль и несколько других сообщений, и я нашел решение:

Сначала напечатайте описание кнопки, щелкнув ее правой кнопкой мыши (должно работать с любым представлением)

    <UIButton: 0x7feefe5e20c0; frame = (17 266.5; 105 30); clipsToBounds = YES; opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x608000236520>>

во-вторых, используйте адрес кнопки в консоли "0x7feefe5e20c0", чтобы напечатать все цели для кнопки

po [0x7feefe5e20c0 allTargets]
<ViewControllerClass: 0x7feefe5de7b0>

Теперь «ViewControllerClass» уже ближе к тому, что мне нужно, это контроллер представления, которому принадлежит представление, содержащее мою кнопку

третья печать всех событий управления для кнопки

(lldb) po [0x7feefe5e20c0 allControlEvents]
0x0000000000000040

и, наконец, действия кнопки печати для цели для события управления

(lldb) po [0x7feefe5e20c0 actionsForTarget:0x7feefe5de7b0 forControlEvent:0x0000000000000040]
<__NSArrayM 0x7fef00078040>(
    actionCalledByBytton:
)

, что дает мне действие "actionCalledByBytton" для действиявызывается кнопкой на «ViewControllerClass»

Тадаа!Надеюсь, это кому-нибудь поможет.

0 голосов
/ 26 апреля 2018

Щелкните правой кнопкой мыши по кнопке в конструкторе интерфейсов. Действия должны быть перечислены под Send Events.

Также можно программно добавлять действия, используя addTarget:action:forControlEvents:

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