【发布时间】:2014-12-10 01:33:24
【问题描述】:
我需要实现一个视图,该视图需要我根据服务器的响应创建一个按钮。
示例响应:
{
...
"enable_button_1" = 1;
"enable_button_2" = 1;
"enable_button_3" = 1;
...
}
目前,我尝试使用 Interface Builder 手动创建按钮。并且它们每个都嵌入在 UIView 中并相互叠加。像这样:
默认情况下它们是隐藏的。因此,无论何时启用或更多按钮,我都会使用if 条件进行检查,然后取消隐藏视图。
例如。仅启用一个按钮
例如。启用两个按钮
但是这样做,我可能会错过一些用例,这似乎是一种不好的做法。有什么方法可以动态创建它,而不是在 Interface Builder 的 UIViews 中创建多个按钮?
【问题讨论】:
-
如果你想使用 Interface Builder,你需要像现在一样将按钮添加到屏幕上,为每个按钮的宽度创建一个 IBOutlet,并将宽度设置为 0.0 以“隐藏”所需的纽扣。如果你做对了你的约束,一切都会为你调整大小......也就是说,如果你想使用循环来使其更具可扩展性,那么你将不得不在代码中进行。如果您像上面一样只有 3 个按钮,那么 Interface Builder 就可以了,但我建议为按钮宽度创建 IBOulet 而不是“隐藏”它们,它的功能要强大得多。
-
@DBoyer,很酷。谢谢你的建议。它现在是“隐藏的”,但不会调整大小。我尝试设置约束,但仍然如此。为什么设置宽度隐藏按钮比使用
setHidden更好? -
如果在按钮之间设置水平约束,改变宽度会导致相邻按钮填满剩余空间。如果宽度为 0.0,则按钮不会出现在屏幕上,因此它“隐藏”,而相邻的按钮会展开以填充剩余空间(这就是自动布局的力量)。
-
@Dboyer,哦,我明白了。你说的是自动布局。我以为这是自动调整大小。当我将其更改为自动布局时,我无法将宽度设置为 0,0。我之前尝试使用
setFrame:CGRectMake(0,0,0,0)更改大小。介意分享一下你是怎么做的吗?我仍然对自动布局不太熟悉。谢谢 -
自动布局系统建立在自动布局约束的概念之上,因为框架大小由系统内部为您处理(因此称为“自动布局”)。您负责的是告诉视图如何通过设置自动布局约束来调整大小。您可以控制的正是这些约束。如果您想更改代码中的约束,则为该约束创建一个 IBOutlet(如按钮的宽度)并将约束设置为 0.0,如下所示: self.buttonWidthConstraint.constant = 0.0;
标签: ios objective-c uibutton interface-builder xcode6