Ios 关于自定义UIKit对象的概念性问题

Ios 关于自定义UIKit对象的概念性问题,ios,xcode,swift,uikit,Ios,Xcode,Swift,Uikit,简单问题:创建自定义版本(例如UILabel、UIButton等)的标准方法是什么,这样我就可以在多个地方轻松使用它?只是为了扩展适当的类: import UIKit class FormField: UITextField { override init() { super.init() // borderStyle = UITextBorderStyle.None } } 基本上,我只是想为一些UI对象设置一些默认值,以便在必要

简单问题:创建自定义版本(例如UILabel、UIButton等)的标准方法是什么,这样我就可以在多个地方轻松使用它?只是为了扩展适当的类:

import UIKit

class FormField: UITextField {

    override init()
    {
        super.init()

      //  borderStyle = UITextBorderStyle.None

    }
}

基本上,我只是想为一些UI对象设置一些默认值,以便在必要时可以轻松地将它们放到界面中。我真的不知道该如何工作。

UIView
及其子类有两个指定的初始值设定项,
-initWithFrame:
-initWithCoder:
。第一个用于编程实例化,而第二个用于从故事板或NIB解包的视图。因此,子类化
UIView
子类的常见模式如下(我使用的是ObjC,但是Swift代码应该很容易理解):

然后,如果您使用的是Interface Builder中的视图,请转到右侧“助手编辑器”侧栏上的“标识”选项卡,并在顶部框中显示
UILabel
UIButton
,输入自定义按钮类名


希望这能让事情有点明朗。

UIView
及其子类有两个指定的初始值设定项,
-initWithFrame:
-initWithCoder:
。第一个用于编程实例化,而第二个用于从故事板或NIB解包的视图。因此,子类化
UIView
子类的常见模式如下(我使用的是ObjC,但是Swift代码应该很容易理解):

然后,如果您使用的是Interface Builder中的视图,请转到右侧“助手编辑器”侧栏上的“标识”选项卡,并在顶部框中显示
UILabel
UIButton
,输入自定义按钮类名


希望这能让事情有点明朗。

UIView
及其子类有两个指定的初始值设定项,
-initWithFrame:
-initWithCoder:
。第一个用于编程实例化,而第二个用于从故事板或NIB解包的视图。因此,子类化
UIView
子类的常见模式如下(我使用的是ObjC,但是Swift代码应该很容易理解):

然后,如果您使用的是Interface Builder中的视图,请转到右侧“助手编辑器”侧栏上的“标识”选项卡,并在顶部框中显示
UILabel
UIButton
,输入自定义按钮类名


希望这能让事情有点明朗。

UIView
及其子类有两个指定的初始值设定项,
-initWithFrame:
-initWithCoder:
。第一个用于编程实例化,而第二个用于从故事板或NIB解包的视图。因此,子类化
UIView
子类的常见模式如下(我使用的是ObjC,但是Swift代码应该很容易理解):

然后,如果您使用的是Interface Builder中的视图,请转到右侧“助手编辑器”侧栏上的“标识”选项卡,并在顶部框中显示
UILabel
UIButton
,输入自定义按钮类名


希望这能把事情弄清楚一点。

UILabel
这样的子类是非常罕见的

最常见的方法是HAS-a模式,您可以让控制器(通常是
UIViewController
)为您管理视图,然后重用该视图。或者,您可以创建一个包含要自定义的视图的
ui视图
,并为您自定义它(传递需要传递的内容)

您还可以使用“以这种方式配置我的视图”功能,可以在现有标准视图上调用该功能。我在可重用代码中很少看到这种情况。我的经验是,这些配置功能非常特定于应用程序,但它们非常常见

UITextField
这样的东西已经有了委托方法,定制这些方法的一种常见方法是创建一个应用特定行为的可重用委托


当然,这取决于您试图实现的目标,但是子类化在模式列表中的位置非常低,除非它是一个明确设计并记录为子类的类(如
UIView
UIViewController
)。

UILabel
这样的子类是非常罕见的

最常见的方法是HAS-a模式,您可以让控制器(通常是
UIViewController
)为您管理视图,然后重用该视图。或者,您可以创建一个包含要自定义的视图的
ui视图
,并为您自定义它(传递需要传递的内容)

您还可以使用“以这种方式配置我的视图”功能,可以在现有标准视图上调用该功能。我在可重用代码中很少看到这种情况。我的经验是,这些配置功能非常特定于应用程序,但它们非常常见

UITextField
这样的东西已经有了委托方法,定制这些方法的一种常见方法是创建一个应用特定行为的可重用委托


当然,这取决于您试图实现的目标,但是子类化在模式列表中的位置非常低,除非它是一个明确设计并记录为子类的类(如
UIView
UIViewController
)。

UILabel
这样的子类是非常罕见的

最常见的方法是HAS-a模式,您可以让控制器(通常是
UIViewController
)为您管理视图,然后重用该视图。或者,您可以创建一个包含要自定义的视图的
ui视图
,并为您自定义它(传递需要传递的内容)

您还可以使用“以这种方式配置我的视图”功能
- (instancetype)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if(self) {
        [self commonInit];
    }
    return self;
}

- (instancetype)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    if(self) {
        [self commonInit];
    }
    return self;
}

- (void)commonInit {
    // Do your special setup here!
}