在调试模式下查找界面生成器中的按钮调用的操作

Find what Action is called by a Button in interface builder in debug mode

我正在调试一个并非我创建且没有文档的大型项目。 我正在使用 Debug View Hierarchy 来停止对需要修改的视图的执行,只需要找出哪个视图控制器负责该视图以及接口调用了哪些操作。

我该怎么做?

视图层次结构仅显示通用 类,而不显示项目中的特定 类。 例如,我可以打印一个按钮的描述,但这只会给我内存地址和框架。另外,打印 superview 只给了我另一个内存地址和帧。

提前致谢!

右键单击界面生成器中的按钮。这些操作应列在 Send Events.

也可以使用 addTarget:action:forControlEvents:

以编程方式添加操作

如果您的按钮中有文本,您可以在“查找导航器”中搜索按钮的文本并进行一些预测,如果按钮上有图像,您可以在 assets.By 中找到图像名称您可以最小化搜索。 如果您发现任何包含静态文本的标签,请去搜索文本!也许这对你有帮助!

我一直在尝试控制台和其他一些帖子,并找到了解决方案:

首先,通过右键单击它来打印按钮说明(适用于任何视图)

    <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"

上的按钮调用的操作

太棒了!希望这对某人有所帮助。