0

这个问题是关于“风格”的,因为我认为这是一个非常普遍的问题,我正在寻找一个优雅的解决方案。我创建了一些“高级” UIView,并尝试使它们非常可定制。通常我在自定义 init 方法中创建 UIView 结构,但我需要知道 init 方法中所有可自定义参数的值,所以有时我需要一个很长的 init 方法,例如:

initWithFrame:color:font:verticalspace:verylonglist:

我尝试使用委托设计模式,但我还需要在 init 方法中传递委托。

我实际的最佳解决方案是将 init 方法留空,并在“配置”方法中移动有关布局的所有内容。每次我遇到像背景颜色或字体这样的属性时,我都会调用此方法并重建视图。

我认为有一个最好的方法来解决这个问题......我很想看看 UITableView 类的代码,因为使用那个类你可以在 init 方法之外传递一个委托。

4

2 回答 2

2

查看类似 aUIButton或的内容UILabel。它们都有大量可配置的方面,但是要简单地创建其中一个对象的实例,它们只需要很少的信息。

通常,提供一些 init 方法,允许您的类的使用者指定最少的信息量以使该类工作。

如果您确实想为消费者提供一种使用一堆值初始化类的方法,请考虑使用某种initWithDictionary:带有NSDictionary参数的方法。这使您的方法名称保持简短,并允许用户为您的类自定义任意数量的设置。

您还可以考虑为消费者提供一种方法来请求具有一些标准值集的实例。UITableViewCell,例如,有一个initWithStyle:reuseIdentifier:方法。重要的部分是样式 -UITableViewCell提供了几种默认样式,例如UITableViewCellStyleDefaultUITableViewCellStyleSubtitle

于 2012-07-04T16:28:17.510 回答
0

我不知道这是否是标准/最佳实践方式,但我在这种情况下使用字典并将其传递给initWithDictionary初始化程序。也可以创建一个返回“默认设置”类型字典的类方法,然后可以对其进行自定义(和委托集),因此在使用类时不需要指定每个参数。

于 2012-07-04T16:30:20.423 回答