这个问题是关于“风格”的,因为我认为这是一个非常普遍的问题,我正在寻找一个优雅的解决方案。 我创建了一些“高级”UIView,我尝试使它们非常可定制。 通常我在自定义init方法中创建UIView结构,但我需要知道init方法中所有可自定义参数的值,所以有时我需要一个非常长的init方法,如:
initWithFrame:方法颜色:字体:verticalspace:verylonglist:
我尝试使用委托设计模式,但我还需要在init方法中传递委托。
我真正的最佳解决方案是将init方法留空并在“configure”方法中移动有关布局的所有内容。每次我有机会像背景颜色或字体这样的属性我将调用此方法,我将重建视图。
我认为有一种解决这个问题的最佳方法...... 我很想看到UITableView类的代码,因为有了这个类,你可以在init方法之外传递一个委托。
答案 0 :(得分:2)
查看UIButton
或UILabel
之类的内容。它们都有大量的可配置方面,但是为了简单地创建其中一个对象的实例,它们只需要很少的信息。
通常,提供init方法,允许您的类的使用者为该类指定最少量的信息。
如果您确实希望为消费者提供一种使用一堆值初始化类的方法,请考虑使用某种initWithDictionary:
方法,该方法需要NSDictionary
个参数。这样可以缩短您的方法名称,并允许用户为您的班级自定义任意数量的设置。
您还可以考虑为消费者提供一种方法来请求具有一些标准值集的实例。例如,UITableViewCell
有initWithStyle:reuseIdentifier:
方法。重要的部分是样式 - UITableViewCell
提供了几种默认样式,例如UITableViewCellStyleDefault
和UITableViewCellStyleSubtitle
。
答案 1 :(得分:0)
我不知道它是否是标准/最佳实践方式,但我在这种情况下使用字典并将其传递给initWithDictionary
初始值设定项。也可以创建一个返回“默认设置”类型字典的类方法,然后可以自定义(和委托集),这样每当使用该类时,不需要指定每个参数。