我想创建一个非常简单的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开发,但这比平常更加紊乱。
为什么会发生这种情况,我需要做些什么来阻止它?
答案 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将完全忽略该类型,而选择明确指定的子类。