在故事板上使用UIButton子类使按钮的边框消失

时间:2013-07-10 11:59:45

标签: ios uibutton uikit uistoryboard

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

经过一些测试后,似乎使用任何自定义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开发,但这比平常更加紊乱。

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

1 个答案:

答案 0 :(得分:1)

Subclasses of UIButton loaded from nibs are not initialized properly中讨论的原因是,您可以从故事板中选择的UIButton的“类型”实际上实现为UIButton子类。 UIButton默认没有边框;边框来自'System'或'Rounded Rect'类型。

docs用于在接口生成器中选择类型的基于代码的等效项提示,以及这些“类型”因此与自定义子类不兼容的事实:

  

buttonWithType:

     

...

     

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

在Interface Builder中同时设置'type'和自定义类时,iOS将完全忽略该类型,而选择明确指定的子类。