在情节提要上使用 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
子类实现的。 UIButton
s 默认没有边框;边框来自“系统”或“圆角矩形”类型。
docs 表示在接口构建器中选择类型的基于代码的等效项暗示了这一点,以及这些“类型”因此与自定义子类不兼容的事实:
buttonWithType:
...
此方法是一个方便的构造函数,用于创建具有特定配置的按钮对象。如果您将
UIButton
子类化,则此方法不会返回您的子类的实例。
在 Interface Builder 中同时设置“类型”和自定义类时,iOS 将完全忽略类型,而支持您明确指定的子类。
【讨论】:
以上是关于在情节提要上使用 UIButton 子类会使按钮的边框消失的主要内容,如果未能解决你的问题,请参考以下文章
Swift 在情节提要中设置 UIButton setBorderColor