UITableViewCell中的UIButton&获得边界/框架

时间:2009-07-02 04:18:17

标签: iphone uitableview

我在UITableView中的UITableView单元格中有一个UIButton。结果是一个包含按钮的列表。当按下UIButton时,它会调用一个touchUpInside方法,一切都很棒。我遇到的问题是我想在按下按钮时从按钮的位置(框架)缩小新视图。如果我只是得到了UIButton的界限

origButton.frame

它位于UITableCell的坐标中,类似于3,50,40,25。这对于列表中的所有按钮都是相同的,因此无论按下列表中的哪个按钮,我都会得到这些坐标。现在,如果我真的抓住了我的视图坐标

self.frame

当调用touchUpInside方法时,我得到更多可用的东西。然后我得到了我的细胞的坐标。大!!所以我可以从UIButton缩小新视图。大!!

但问题在于:如果向上滚动列表,点按按钮,视图不会从按钮缩小,而是从屏幕下方的位置缩小。问题是,我所拥有的坐标是在单元格向上滚动之前。事实上,所有单元格的所有坐标都反映了它们在表格中的实际位置,只有第一个可见集合的坐标可用。滚动没有改变这些坐标。

我想也许我可以使用超级视图的坐标,但那些没有帮助。

任何人都知道如何获得表格中列出的按钮(或视图或任何其他项目)的准确坐标,还是不可能?

以下是我计算新视图中心点的方法:

floatingView.center = CGPointMake(origButton.frame.origin.x + 
                                  origButton.frame.size.width / 2,
                         self.frame.origin.y + self.superview.frame.origin.y);

谢谢!

2 个答案:

答案 0 :(得分:11)

更新

记住UITableView是一个scrollView。因此它在tableView(scrollView)中嵌入了contentView。

您收到的帧是正确的,但它不参考您想要的视图帧。相反,框架是对contentView的引用。滚动时,单元格不会更改以引用contentView.frame。但是,contentView.frame会在您滚动时(以contentOffset的数量)更改引用tableView的框架。

所以这留下了2个选项:

使用以下方法之一将单元格的框架从contentView的引用转换为tableView:

 - (CGRect)convertRect:(CGRect)rect toView:(UIView *)view

 - (CGRect)convertRect:(CGRect)rect fromView:(UIView *)view

或者,从框架中手动减去contentOffset。

我推荐第一种方法。


原始答案:

我不确定您是否已将UITableViewCell子类化,或者是否正在从UITableViewController执行此代码。

但是,我认为你想要的方法是:

- (CGRect)rectForRowAtIndexPath:(NSIndexPath *)indexPath

这是UItableView的一种方法,它可以让你获得任何单元格的矩形。

答案 1 :(得分:7)

我试图做一些非常相似的事情。在iPad上,当选择表格单元格时,我想在单元格旁边显示一个弹出窗口。以下代码适用于执行此类操作。在这种情况下,self是一个UITableViewController。

CGRect rect = [cell.superview convertRect:cell.frame toView:self.view];