ios - 如何正确重命名颜色集及其在 iOS 中的所有引用?

标签 ios xcode

以前,其中一个颜色集被命名为“GreenTextColor”,现在作为设计更改的一部分,文本颜色不再是绿色...所以我想将其命名为更通用的“PrimaryTextColor”。但是我想不出一种方法来重构 > 重命名颜色集,以便所有使用该颜色集的地方都自动重命名......

我尝试双击颜色集并以这种方式重命名它,但是在检查所有使用该颜色集的 xib 文件后,现在变成了“GreenTextColor(缺失)”并且不会自动更改为新的颜色集。

我目前正在做的是查找并替换 *.xib 文件中出现的所有文本,这非常痛苦。它现在有效,但一定有更好的方法吗?

最佳答案

令人震惊的是,Xcode 的查找/替换不能正确支持 Interface Builder 文件。有时您可以找到但不能替换(字体)。其他时候你甚至找不到(颜色集)。

到目前为止,我一直不得不通过结合使用 find/grep 和 sed 来解决这个问题,直接修改界面生成器文件。这可能有风险。确保您已做出更改并且总体上相信自己。

为了仅查看要进行的更改而不修改任何文件,我在项目目录的根目录中使用了以下命令:

find . -type f \( -name '*.xib' -or -name '*.storyboard' \) \
  -exec echo {} \; \
  -exec sed -E -n 's/([cC]olor.*)name="oldColorName"/\1name="newColorName"/p' {} \;

这将打印找到的每个文件以及根据 sed 模式将对该文件进行的任何更改。图案很复杂,以保证与颜色使用相关的匹配。如果您的颜色名称足够独特以至于您不担心误报,您可以删除它并简单地匹配名称本身的模式:'s/oldColorName/newColorName/p'

准备好应用更改时,在文件上就地执行 sed 命令:

find . -type f \( -name '*.xib' -or -name '*.storyboard' \) \
  -exec sed -E -i '' 's/([cC]olor.*)name="oldColorName"/\1name="newColorName"/' {} \;

请注意,这里故意删除了打印。不要试图在你的命令中保留 -n/pThat's not how sed works .无论如何,此时您都可以查看您选择的 diff 工具中的更改。如果它没有达到您的预期,请丢弃它们。

此外,即使新颜色集具有不同的颜色值,您也可以执行此更改,这在更新颜色和重命名颜色时非常方便。当您下次在 Xcode 中打开 Interface Builder 文件时,颜色值将在 XML 中自动更新以匹配与更改后的名称对应的值。

关于ios - 如何正确重命名颜色集及其在 iOS 中的所有引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64954173/

相关文章:

iphone - 可以使用 Core Animation 使状态栏消失/溶解吗?

ios - 出现不需要的动画

objective-c - UINavigationController 内存问题

iphone - 如何在不丢失标签栏 Controller 的情况下切换模态

iOS:发送缓冲区中的套接字连接错误

ios - 尝试使用TWRequest进行发布时,获取“无法识别的选择器已发送至实例”

javascript - iPhone 上的某些移动浏览器无法正确执行 Javascript

xcode - 可选类型 'string?' 的值未解包?

xcode - 目标...覆盖`Pods/Pods.xcconfig中定义的 `OTHER_LDFLAGS`build设置

ios - 添加 TabBar 推送单元格并向上查看 [Swift]