将UILable更改为UITextView,而不从对象库中删除和添加



在Xcode中是否可以将UILabel更改为UITextView,而无需删除标签然后添加文本视图。我想也许你可以换个班,但它只能找到UILabel

假设我添加了10个标签,添加了所有的约束,然后意识到我需要textViews。与其全部删除,我还能以某种方式更改对象类,然后更新IB吗?

这是IB的一大烦恼。如果您在身份检查器中更改视图对象,则有点。问题是IB中对象的属性是在第一次添加时设置的。IB将继续显示旧类型的设置。

如果将视图更改为其他类型,则"属性"检查器中显示的属性和IB中的其他选项卡不会像应该的那样更改。

另一方面,如果删除上一个对象并添加新对象类型的实例,则约束、出口和操作都将丢失。

前几天我发现,如果我在IB中选择了一组对象并选择"嵌入到视图中",那么它将删除新嵌入对象的所有约束。啊!我有一组相当复杂的视图和控件,我设置了它们的布局和约束,使它们看起来和大小都正确,然后我意识到我需要将它们封闭在视图中。在选择"嵌入视图"后,我又回到了最初的位置,可能浪费了15或20分钟的时间重新获得正确的约束。

虽然我同意其他关于在直接更改XML时使用谨慎的答案,但我发现有必要进行类似的更改,并且已经这样做了,保持了我的约束不变,并且取得了成功。

确保您正在使用源代码管理,以便在需要时放弃更改。

我建议使修改后的控件的属性与在接口生成器中创建的新类型的工作控件相匹配。

示例

要从标签更改为文本字段,您需要将XML中的"标签"标记更改为"文本字段"

<label opaque="NO" ... </label>

成为

<textField opaque:NO ... </textField>

其中"…"是控件的其余属性和元素。

元素标记更改完成后,修改元素的属性,使textField(在本例中)与界面生成器中创建的另一个Text Field相匹配。注意不要更改id属性;id属性是约束映射到控件的方式。

保存该文件,然后在界面生成器中重新打开该文件。如果接口构建器能够解析该文件,那么您就可以恢复正常的开发。

同样,要小心,但这可以节省大量时间。

将故事板编辑为纯xml是一个非常糟糕的主意。如果你想要文本视图而不是UILabel,是因为你希望每个视图都有不同的行为,所以我认为最好的解决方案是删除文本视图,然后重新开始。

最新更新