【问题标题】:How can I addSubview to UIButton in Interface Builder如何在 Interface Builder 中将 Subview 添加到 UIButton
【发布时间】:2012-11-14 07:52:41
【问题描述】:

就像我说的,我在Interface Builder中添加了一个UIButton,我想添加一个UILabel、UIImageView作为按钮的子视图,但是我不能在IB中添加任何对象。有人知道该怎么做吗?非常感谢。

我可以使用代码来实现它,但我想在 IB 中实现它,所以我可以在任何我想要的类中使用它。

【问题讨论】:

  • 您不需要为此使用自定义的UILabel 子类吗?

标签: ios xcode uibutton interface-builder subview


【解决方案1】:

我之前通过添加 UIView(而不是 UIButton)然后将 UIButton 和 UILabel 添加到 UIView 来完成此操作。 UIButton 的点击仍然有效,并且您也有一个标签。你也可以像这样添加任何东西。

【讨论】:

  • 这个貌似最简单,不需要代码,不影响布局,省去多余的取景。自定义按钮方法对我不起作用。
  • 然后按钮不显示高亮状态。当用户点击它时,它看起来不像是一个按钮,因为它没有被突出显示。有没有办法保持这种亮点?或者以某种方式创建它?
  • 这种方法的另一个优点是您仍然可以将 segues 连接到它,而且一切都在 interface builder 中。
【解决方案2】:

我通常通过以下方式实现这一点

  1. 在 Interface Builder 中创建一个新的 UIView,并将其设置为您希望按钮具有的大小和位置
  2. 将您的子视图添加到该 UIView
  3. 在 Indentity Inspector 中将 UIView 的类设置为 UIButton

您的 UIView 现在的工作方式与 UIButton 完全一样

【讨论】:

  • 这里没有工作。链接到 UIButton 的操作永远不会被调用。
  • 太棒了,这是赢家。可以像常规按钮一样像往常一样启用/禁用,并且仅限 IB。我猜 Colas 没有启用 UserInteraction。
  • 这样做有副作用。故事板文件中的元素保留为 ... ,但带有 CustomClass="UIButton"。这意味着 ctrl click - drag 不允许在 Interface Builder 中创建 segue。我通过将 标记更改为
  • 所以我只是添加了一个与UIView大小相同的按钮。一切正常。查看最佳答案
  • 这对我也不起作用(我的投票有点过早)。我确定为 UIView 选中“启用用户交互”,并为子视图取消选中它,但它仍然不会调用链接操作。 Fogmeister 的解决方案让我更加幸运。
【解决方案3】:

代替 UIButton,将 UILabel 和 UIImageView 添加到 UIView,然后向其添加点击动作。

编辑 1:

制作高亮颜色效果很容易,使用如下代码:

- (void) onViewTap:(id)sender
{
    [UIView animateWithDuration:0.1
                          delay:0
                        options:UIViewAnimationOptionCurveEaseOut
                     animations:^{
                         _view.backgroundColor = [UIColor blueColor];
                     }

                     completion:^(BOOL finished){
                         _view.backgroundColor = [UIColor whiteColor];
                     }];

    //write tap actions below
}
- (void)viewDidLoad
{
    _view.userInteractionEnabled = YES;
    UITapGestureRecognizer* tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onViewTap:)];
    [_view addGestureRecognizer:tap];
}

【讨论】:

  • 谢谢 Mhdali,这是个好主意,我以前试过,发现我不能让 UIView 看起来像 UIButton 的状态,就像当我按下 UIButton 时,UIButton显示突出显示的颜色...我真的很想使用 UIButton 的属性。
【解决方案4】:

制作您的 UIButton 自定义按钮,然后在其上添加 UILabel,然后您将受益于 UIButton 属性和操作,希望这对您有所帮助

【讨论】:

  • 对不起,不能那样做,谢谢。我创建了一个新的 .xib 文件,在这个 IB 中,我只创建了一个 UIButton,就像我说的,我想把一个 UILabel 和一个 UIImageView 作为 UIButton 的子视图。 Mhdali 和 Fogmeister 帮我解决了这个问题。
  • 这种方法对我不起作用 - IB 仍然不允许我嵌套标签。 (FWIW)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多