Ios 故事板中控件的动态子类

Ios 故事板中控件的动态子类,ios,objective-c,inheritance,interface-builder,Ios,Objective C,Inheritance,Interface Builder,我有一个用户用来记录他们身体测量的应用程序。目前它使用UIPickerView,但我想编写一个定制控件,它看起来更像一个(平面的,非skeu!)卷尺 用户可以使用公制或英制度量,我希望每个表示都有一个不同的类,因为将它们放在一起的UIPicker的当前代码非常混乱 如果可能的话,我还想使用interface builder 所以我想建立这样的东西: 然后在IB中选择顶级类。在viewDidLoad中,我想选择要加载的子类的类型 我的问题是,我是不是走错了方向?当我开始实现这一点时,我意识到在

我有一个用户用来记录他们身体测量的应用程序。目前它使用UIPickerView,但我想编写一个定制控件,它看起来更像一个(平面的,非skeu!)卷尺

用户可以使用公制或英制度量,我希望每个表示都有一个不同的类,因为将它们放在一起的UIPicker的当前代码非常混乱

如果可能的话,我还想使用interface builder

所以我想建立这样的东西:

然后在IB中选择顶级类。在viewDidLoad中,我想选择要加载的子类的类型

我的问题是,我是不是走错了方向?当我开始实现这一点时,我意识到在点击viewDidLoad之前,控件是使用awakeFromNib初始化的


实现我追求的目标的最佳方式是什么?还是我过于简化了?最简单的方法是什么,可以朝我想要的方向发展?

我认为实现这一行为的一个好方法是使用中解释的策略模式


您可以只使用一个子类:
horizontalslaider
,该子类具有
strategy
属性和多个帮助器类来完成真正的工作。

谢谢@raul,这看起来是一个不错的方法。在调用awakeFromNib之前,是否有方法将运行时值从视图控制器传递到HorizontalSlider?否则,我将不得不在HorizontalSlider中添加一些额外的依赖项。不鼓励在
awakeFromNib
之前在对象之间传递消息,因为不能保证对象实例化的顺序。您可以在
awakeFromNib
reference中了解更多信息。也许您可以在
HorizontalSilder
中实现一个定制的
initWithCoder:
init
方法来做您想做的事情?在
awakeFromNib
之前只调用一个(如果类符合
NSCoding
协议
initWithCoder:
,否则使用
init
方法)