通过LLDB表达式动态修改UI
情境
假设您作为iOS开发人员正在开发应用程序的UI组件。 您的PM来了,轻拍您的肩膀以请求更改特定按钮上的颜色。 通常在这种情况下,开发人员会感到不满意,因为这意味着他必须转到代码库来确定与按钮相关的代码的范围,更改其color属性,然后重建并运行该应用程序以验证颜色是否成功更改。
如果这样的请求不是那么频繁,那不是什么大麻烦。 但是,项目经理或设计师可能仍然有问题,请您反复尝试按钮上的不同颜色,直到他们对视觉效果满意为止。
我们是否必须修复代码并重新运行以检查一遍又一遍的agian? 有没有更有效的方法来实现这一目标?
答案是肯定的。 我们甚至不需要更改一行代码就可以做到。 魔术是LLDB表达式。
演示版
让我们有一个在iPhone模拟器上运行的非常简单的应用程序-只需单击视图上的一个按钮即可。 要进入调试模式,我们可以单击工具栏上的暂停按钮:
然后,我们可以输入以下命令:
po [[[UIApplication sharedApplication] keyWindow] recursiveDescription]
此命令将打印出与视图层次结构有关的所有信息,包括其在内存中的地址及其布局。
它告诉我们按钮为0x7fb0c5f15900。 因此,让我们从内存中获取它:
expression -- id $testView = (id)0x7fb0c5f15900
expression
表示执行以下命令并打印出结果,此处我们尝试将按钮传递给testView。
现在可以修改按钮的颜色了。 在testView上使用expression
命令,我们刚刚获取:
//将按钮的颜色设置为红色
expression -- (void)[$testView setBackgroundColor:[UIColor redColor]]
为了见证更改,我们需要通过键入以下命令来刷新UI:
expression -- (void)[CATransaction flush]
然后您将看到按钮按预期变为红色!
总览
本文仅显示了一种使用LLDB表达式处理UI的方法。 LLDB是一个功能强大的工具,使我们能够设置按钮的文本,边框,甚至导航到另一个页面。
对于expression
命令,它实际上是p
和po
的别名; p
与expression --
相同,而po
等于expression -O --
expression。 有关更多用法,请尝试使用help expression
进行查找。