我怎样才能重新创建TweetBot样式的“下拉”单元格菜单?

时间:2011-11-08 22:40:36

标签: iphone objective-c ipad uitableview

应用程序'TweetBot'在每个单元格下方都有一个下拉菜单,当单击该单元格时会出现该菜单。菜单显示为不同的单元格,位于抽头单元格的正下方。这是一个(相当大的)截图,使其更加清晰:

TweetBot

这个界面的想法完全适合我正在创建的应用程序。由于需要正确匹配cell / indexPaths,因此它并不像听起来那么直接。我对如何实现这一点有一些想法 - 但是:

您将如何实现此功能(或者如果您已经完成此功能,您是如何实现此功能的?)或者甚至更好 - 是否已经有任何开源实现?

3 个答案:

答案 0 :(得分:4)

创建单元格时,创建2个UIViews,一个包含所有正常内容,另一个包含下拉列表。

设置下拉视图的自动调整大小遮罩,使其具有不灵活的高度和灵活的上边距。 (其他照常) 设置普通内容视图的自动调整大小蒙版,使其具有不灵活的边距和灵活的宽度和高度。

为两个视图设置标记。

在内容视图之前添加下拉视图,使其被内容视图隐藏(内容视图也不能具有透明背景)

在表格视图委托方法中,对于按下单元格时,使用标记来设置添加的内容视图的自动调整大小遮罩,使用与之前相同的内容,除了灵活的高度和灵活的底部边距。并添加:

[tableView beginUpdates];
[tableView endUpdates];

创建一个实例变量来保存NSIndexPath对象。将变量设置为按下的单元格的索引路径。

在表视图中委托方法设置单元格的高度,添加一个if语句,以便将下拉列表的高度添加到所选单元格的高度(将在上面描述的实例变量中)

将必要的if语句添加到单元格按下的方法,以确定是显示下拉列表还是隐藏它。

这只是指向向单元格添加下拉的一种方法的粗略指针,还有其他方法,这可能更好。当我到笔记本电脑时,我可能会添加一些代码和更好的细节。

答案 1 :(得分:1)

答案是:有很多困难。特别是如果您的UITableViewCells是半透明的并且具有“分组”表格视图样式,就像我的情况一样。

我仍然没有完美的解决方案,特别是在每个部分的末端,圆角有问题。但是,这是我迄今为止如何做到这一点的基本概要。

  
      
  1. 子类UITableViewCell - 例如, ExtendableTableViewCell

  2.   
  3. 创建一个简单的类来管理扩展的单元格。

  4.   
  5. 从这个简单的类中,让它调用一个方法   ExtendableTableViewCell,例如 extendCell ,只要单元格应该   延长。

  6.   
  7. 在extendCell中,添加相关的扩展动画。有一切   各种带有遮罩,边界和锚点的动画技巧   在半透明细胞的情况下是必要的 - 我仍然是这样   还没有完善。

  8.   

如果有人能够看到更好的方法,或者对如何解决动画问题,或者很好地扩展部分中的底部单元格有任何想法,请说出来!

答案 2 :(得分:1)

乔丹似乎在这方面取得了一些进展;我自己没有尝试过类似的东西,但这是我的看法:

在每个常规UITableViewCell之间插入一个0px高度的透明UITableViewCell。您应该可以使用if(index%2)

中的ConfigureCellForIndexPath:条件块轻松完成此操作

使工具栏成为UITableView的子视图,但将UITableViewCells置于其上方。当用户点击单元格时,您只需将工具栏重新定位在该单元格的底部,并将透明单元格设置为工具栏的高度。

请记住在动画完成后将工具栏放在透明单元格的前面。否则,用户将向虚拟小区发送触摸事件

您需要考虑用户点击下边界不在屏幕上的单元格的情况,并滚动UITableView以使自定义工具栏保持在视图中。否则,用户可能甚至没有意识到工具栏已被打开。

祝你好运!