【问题标题】:Dynamically create UIButton based on response from server根据服务器的响应动态创建 UIButton
【发布时间】: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


【解决方案1】:

您始终可以通过编程方式创建按钮并将它们添加到您的视图中。您必须计算按钮框架的宽度,以便它们始终 100% 适合视图。

例如像这样:

    //Here you'd have to calculate the correct position of the button you want to add
    CGRect frame = CGRectMake(0, 0, self.buttonView.frame.size.width, self.buttonView.frame.size.height);
    UIButton *button = [[UIButton alloc] initWithFrame:frame];
    [button setTitle:@"myButton" forState:UIControlStateNormal];
    [self.buttonView addSubview:button];

【讨论】:

  • 他正在使用利用布局约束的Interface Builder,无法设置通过情节提要创建的元素的框架。您只能更改约束。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-20
  • 2014-09-21
  • 2016-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多