在情节提要上使用 UIButton 子类会使按钮的边框消失

Posted

技术标签:

【中文标题】在情节提要上使用 UIButton 子类会使按钮的边框消失【英文标题】:Using a UIButton subclass on the storyboard makes the button's border vanish 【发布时间】:2013-07-10 11:59:45 【问题描述】:

我想创建一个非常简单的 UIButton 子类来添加一些额外的功能,但是当我在情节提要上使用它时,我的按钮边框似乎消失了。

经过一些测试,似乎使用 any 自定义 UIButton 子类具有这种效果,即使是完全空的接口和实现。

它很容易重现。请尝试以下步骤:

1) 创建一个新的单视图应用程序 2) 在情节提要的视图中间添加一个 UIButton 3)在模拟器中运行。

您应该看到一个带有边框的 UIButton,正如预期的那样。现在...

4) 创建一个名为 SomeUIButtonClass 的 UIButton 子类,其接口声明为空,实现为空,如下所示:

SomeUIButtonSubclass.h:

#import <UIKit/UIKit.h>

@interface SomeUIButtonSubclass : UIButton

@end

SomeUIButtonSubclass.m:

#import "SomeUIButtonSubclass.h"

@implementation SomeUIButtonSubclass

@end

5) 在情节提要上,选择您之前添加的按钮,然后在 Identity Inspector 中的 Custom Class 下,将 Class 设置为 SomeUIButtonSubclass。 6) 再次在模拟器中运行。

你会看到一个没有边框的按钮。

我已经习惯了疯狂的 ios 开发,但这比平时更疯狂。

为什么会发生这种情况,我需要做些什么来防止它发生?

【问题讨论】:

那么你需要告诉按钮是什么类型的按钮...... 您必须在 SomeUIButtonSubclass 中设置按钮的属性,例如边框、边框宽度等。 @Unicorn 为什么?是否需要为 UIButton 的子类显式设置仅在使用基类时才具有默认值的东西?如果是这样,那些东西是什么(以及它们在哪里记录)?我看不出按钮的现有属性、属性或行为应该因为它是 UIButton 的(空)子类而改变的任何原因 - 我错过了什么吗? ***.com/questions/3638053/… @Desdenova 太棒了,谢谢。这就是答案。 【参考方案1】:

正如Subclasses of UIButton loaded from nibs are not initialized properly 中所讨论的,其原因是您可以从情节提要中选择的UIButton 的“类型”实际上是作为UIButton 子类实现的。 UIButtons 默认没有边框;边框来自“系统”或“圆角矩形”类型。

docs 表示在接口构建器中选择类型的基于代码的等效项暗示了这一点,以及这些“类型”因此与自定义子类不兼容的事实:

buttonWithType:

...

此方法是一个方便的构造函数,用于创建具有特定配置的按钮对象。如果您将UIButton 子类化,则此方法不会返回您的子类的实例。

在 Interface Builder 中同时设置“类型”和自定义类时,iOS 将完全忽略类型,而支持您明确指定的子类。

【讨论】:

以上是关于在情节提要上使用 UIButton 子类会使按钮的边框消失的主要内容,如果未能解决你的问题,请参考以下文章

Swift 在情节提要中设置 UIButton setBorderColor

UIButton子类在故事板中崩溃[重复]

UIButton 移动到自定义单元格中的情节提要

一旦在情节提要中设置了 UIButton,iOS 9.2 就无法以编程方式更改它的标题

快速以编程方式创建后如何在情节提要中链接 UIButton

将取消 UIButton 添加到 UINavigationcontroller