我有UITableView
个自定义单元格。每个单元格都有相当复杂的布局和很多子视图,所有这些都有事件操作:UIImageView
带有手势识别器,多个UIButtons
带有一些动作,两个UILabel
带有手势识别器。
所以我感兴趣的是有一些优雅的方法来处理他们的目标行动吗?
现在我看到三种方式:
BlocksKit
cellForRowAtIndexPath:
救援)
CellEventHandler
,将所有需要的依赖项(控制器' s navigation controller
,数据数组等)传递给它,并将所有单元格的视图操作选择器放在那里。
但我对所有这些方式都不满意。有人可以描述一些优雅的方式,这将有助于使控制器变薄,也将易于维护。我确定这个工作流程应该存在一些模式。
答案 0 :(得分:4)
使用委托。构造单元时,将其委托属性设置为符合委派协议的某个实例。触发操作时,只需将行为委派给代理。
这样,您最终得到了明确定义的委托协议和封装在该类中的功能。是否代表将由您决定是否由您决定。 TableViewController或自定义类。
答案 1 :(得分:1)
我认为处理复杂单元的最有效方法是继承UITableViewCell,并在子类中直接处理所有事件。您可以直接在那里创建IBOutlets和不作为。
在any(d == 'Q') || any(d == 'Z')
中,您只需调用一个自定义函数viewForRowAtIndexPath
即可在类的标题中声明,因此即使单元格的初始设置超出了viewController,也极大地简化了设置。
答案 2 :(得分:0)
视图和操作应该在MVC模式的视图中,在您的情况下是自定义单元格。您应该在自定义单元类中为gestureRecognizer(在单元格中添加tapGestureRecognizer)编写一种方法。方法将识别通过内省调用它的对象的类型,即isKindOfClass UIButton / Label / ImageView。每个对象都会进一步识别其标签,例如,如果gestureRecognizer说它是调用此方法的标签,但标签label1或label2现在可以比较其标签以检测它。