iOS 快速定位UI源码

1. 寻找Button的action selector

第一步需要定位到Button的对象的地址。以前一般是用 [[UIApp keyWindow] recursiveDescription] 来找到对象,比较考眼力。或者用图形化商业软件Reveal,现在Xcode 8自带了这个功能。



右边可以看到Button的Address(下面可以看到Target和Action,但是Action应该是有问题的)。接下来用lldb来找到action

(lldb) po [0x7f9a4cda44b0 allControlEvents]
0x0000000000000040

(lldb) po [0x7f9a4cda44b0 allTargets]
{(
    <AssistantView: 0x7f9a4cd8fa80>
)}

(lldb) po [0x7f9a4cda44b0 actionsForTarget:0x7f9a4cd8fa80 forControlEvent:0x40]
<__NSArrayM 0x7f9a4ccabc00>(
onGotoCreateAccountClick:
)

2. 找到当前的ViewController

po [[UIApp rootViewController] _printHierarchy]

如果有安装chisel就更简单了,直接pvc

  • 方法2:通过Responder chain
    一般响应链的流程是:view -> super view -> view controller -> (view controller's view's super view) -> window -> application -> nil



    随便找一个子view,递归的调用nextResponder,最终是能够找到VC。

  • 方法3:push/pop前断点
    大部分ViewController都是通过push方法进入的,在这里设一个断点,通常在caller附近能看到被push的controller的一下信息;查看寄存器参数也能找到。

breakpoint set -b '-[UINavigationController pushViewController:animated:]'
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容