关于自定义 UIKit 对象的概念问题
Conceptual q about custom UIKit objects
简单问题:创建自定义版本的标准方法是什么,比如 UI 标签、UI 按钮等,以便我可以在多个地方轻松使用它?是否只是简单地扩展适当的 class:
import UIKit
class FormField: UITextField {
override init()
{
super.init()
// borderStyle = UITextBorderStyle.None
}
}
基本上只是想为某些 UI 对象设置一些默认值,以便在必要时我可以轻松地将它们放入界面中。不太确定如何让它工作。
UIView
及其子class 有两个指定的初始值设定项,-initWithFrame:
和-initWithCoder:
。第一个用于编程实例化,而后者用于从 Storyboard 或 NIB 中解包的视图。因此,subclassing UIView
subclasses 的常见模式如下(我使用的是 ObjC,但 Swift 代码应该很容易理解):
- (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!
}
然后,如果您使用的是 Interface Builder 中的视图,请转到右侧辅助编辑器侧边栏上的标识选项卡,然后在顶部框中显示 UILabel
或 UIButton
,输入您的自定义按钮 class 名称。
希望这能让事情变得更清楚一些。
class 像 UILabel
这样的东西是非常罕见的。
最常见的方法是 HAS-A 模式,您可以让控制器(通常是 UIViewController
)为您管理视图并重用它。或者,您可以制作一个 UIView
包含您要自定义的视图,并为您自定义它(传递需要传递的内容)。
您还可以拥有一个可以在现有标准视图上调用的 "configure my view this way" 函数。我在可重用代码中很少看到这种情况。我的经验是,这些配置函数是非常特定于应用程序的,但它们很常见。
像 UITextField
这样的东西已经有了委托方法,自定义它们的一种常见方法是创建一个应用某些行为的可重用委托。
这当然取决于您要实现的目标,但是 subclassing 在模式列表中排得很靠后,除非它是 class 明确设计和记录为subclassed(如 UIView
或 UIViewController
)。
简单问题:创建自定义版本的标准方法是什么,比如 UI 标签、UI 按钮等,以便我可以在多个地方轻松使用它?是否只是简单地扩展适当的 class:
import UIKit
class FormField: UITextField {
override init()
{
super.init()
// borderStyle = UITextBorderStyle.None
}
}
基本上只是想为某些 UI 对象设置一些默认值,以便在必要时我可以轻松地将它们放入界面中。不太确定如何让它工作。
UIView
及其子class 有两个指定的初始值设定项,-initWithFrame:
和-initWithCoder:
。第一个用于编程实例化,而后者用于从 Storyboard 或 NIB 中解包的视图。因此,subclassing UIView
subclasses 的常见模式如下(我使用的是 ObjC,但 Swift 代码应该很容易理解):
- (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!
}
然后,如果您使用的是 Interface Builder 中的视图,请转到右侧辅助编辑器侧边栏上的标识选项卡,然后在顶部框中显示 UILabel
或 UIButton
,输入您的自定义按钮 class 名称。
希望这能让事情变得更清楚一些。
class 像 UILabel
这样的东西是非常罕见的。
最常见的方法是 HAS-A 模式,您可以让控制器(通常是 UIViewController
)为您管理视图并重用它。或者,您可以制作一个 UIView
包含您要自定义的视图,并为您自定义它(传递需要传递的内容)。
您还可以拥有一个可以在现有标准视图上调用的 "configure my view this way" 函数。我在可重用代码中很少看到这种情况。我的经验是,这些配置函数是非常特定于应用程序的,但它们很常见。
像 UITextField
这样的东西已经有了委托方法,自定义它们的一种常见方法是创建一个应用某些行为的可重用委托。
这当然取决于您要实现的目标,但是 subclassing 在模式列表中排得很靠后,除非它是 class 明确设计和记录为subclassed(如 UIView
或 UIViewController
)。