我在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);
谢谢!
答案 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];