覆盖UITableViewCell的可选区域?

时间:2009-12-30 05:19:33

标签: iphone

我正在尝试避免在我的UITableViewCell子类中放置一个按钮,这样我就不会不必要地延迟滚动速度。

该按钮会将另一个视图推送到导航堆栈。

我认为,因为UITableView已经有内置和优化的方法来管理它,简单地限制我的单元格的可触摸区域将是实现我的目标的最简单和最有效的方法。

我真的不知道如何实现这样的东西。我有一种感觉,我必须覆盖pointInside:withEvent:或hitTest:withEvent:,但我不知道如何。管理touchEvents和UIResponder的东西仍然让我感到厌烦。

所以我的问题最终是,在我的rootViewController中,我将如何实现选择一行只能用于220,10,40,40?

谢谢!

2 个答案:

答案 0 :(得分:1)

一般而言,UITableViewCell应具有正常的选择方式(即非UITableViewCellSelectionStyleNone)。您不应该在要重复使用任意次数的单元格上使用按钮。

如果您在UITableView中使用了大量UIButton,您可能需要重新考虑UI的设计方式。

您不能轻易(据我所知)更改单元格中的“可选”部分 - 无论如何都可以选择整个单元格(您可以将样式设置为无选择,但您仍会收到触摸更新) 。

答案 1 :(得分:1)

实际上,您描述的行为听起来像是UITableViewCellAccessoryDetailDisclosureButton的工作。如果您要将另一个视图推送到堆栈但不想在用户选择正确的单元格时执行此操作,请使用详细信息披露按钮以最大化您与现有UI约定的一致性。没有更多信息就很难说。

至于做一个检测子区域触摸所需的工作,这可能比它的价值更麻烦。是的,将单个视图添加到单元格会产生合成成本,但如果您只是谈论一个按钮,并且按钮的背景可以设置为不透明,那么您可能会很好。另一种方法是重新发明轮子以在单元的子区域中重新创建按钮行为,这听起来不像SDK成熟时维护起来那么有趣。

也就是说,向单元格添加视图本身不会产生合成成本,它正在绘制那些麻烦的视图。因此,如果你真的想在优化上坚持下去,你可以创建一个预渲染的单元格背景图像,其中包含所需按钮的外观,然后在上面放置一个自定义,无图像,透明的UIButton实例。它。无需绘制,因此无需额外的合成成本。值得一试。

你没有来这里进行过早的优化演讲,所以我不会打扰一个,但我说现在只用正常按钮做单元格,确保你喜欢使用的功能然后优化如果你正在寻找你不满意的表现,那就到最后。