我在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);
谢谢!
更新:
记住UITableView是一个scrollView.因此它在tableView(scrollView)中嵌入了contentView.
您收到的帧是正确的,但它不参考您想要的视图帧.相反,框架是对contentView的引用.滚动时,单元格不会更改以引用contentView.frame.但是,当您滚动时(contentOffset的数量),contentView.frame会更改引用tableView的框架.
所以这留下了两个选择:
使用以下方法之一将单元格的框架从contentView的引用转换为tableView:
- (CGRect)convertRect:(CGRect)rect toView:(UIView *)view - (CGRect)convertRect:(CGRect)rect fromView:(UIView *)view
或者,手动从帧中减去contentOffset.
我推荐第一种方法.
原答案:
我不确定您是否已将UITableViewCell子类化或从UITableViewController执行此代码.
但是,我认为你想要的方法是:
- (CGRect)rectForRowAtIndexPath:(NSIndexPath *)indexPath
这是UItableView的一种方法,可以让你获得任何单元格的矩形.
我试图做一些非常相似的事情.在iPad上,当选择表格单元格时,我想在单元格旁边显示一个弹出窗口.以下代码适用于执行此类操作.在这种情况下,self是一个UITableViewController.
CGRect rect = [cell.superview convertRect:cell.frame toView:self.view];