滚动tableview后如何获取tableviewcell的位置

时间:2013-09-16 13:52:14

标签: iphone ios uitableview scroll

我想获得UITableVIewCell相对于屏幕的位置,而不是相对于tableview。因此,如果我滚动tableview,位置会更新。

3 个答案:

答案 0 :(得分:6)

您应该使用两个步骤来实现此目的:

  1. 使用 UITableView 的其中一种方法获取所选单元格/页眉或页脚的 CGRect 信息:
  2. - (CGRect)rectForHeaderInSection:(NSInteger)section;
    - (CGRect)rectForFooterInSection:(NSInteger)section;
    - (CGRect)rectForRowAtIndexPath:(NSIndexPath *)indexPath;
    
         

    2。使用 UITableView convertRect 方法将 CGRect 转换为表的容器视图。例如。要获取第一个标题的当前位置,您可以使用此代码:

        CGRect rect = [mytable convertRect:[mytable rectForHeaderInSection:0] toView:[mytable superview]];
    

    如果你想要这些以上语音,你可能想要在UITableView的委托方法中包含这些代码:

      - (void)scrollViewDidScroll:(UIScrollView *)scrollView_ {.....
    

    我使用类似技术完成的一个例子是在github上 - 如何修复表头行:

    https://github.com/codedad/SO_Fixed_TableHeader_iOS

    希望它可以帮到你!

答案 1 :(得分:0)

你需要从孩子到父母的位置:

float x = cell.frame.origin.x;
float y = cell.frame.origin.y;

UIView* parent = cell.parent;

while(parent != nil)
{
    x += parent.frame.origin.x;
    y += parent.frame.origin.y;
    parent = parent.parent;
}

答案 2 :(得分:0)

使用-[UITableView rectForRowAtIndexPath:]方法。请记住,如果您在屏幕上关闭单元格时尝试获取此信息,则会出现意外结果。然后,您可以使用-[UIView convertRect:toView:]方法将其转换为视图控制器的视图(我认为这就是屏幕的含义)。

参考:https://developer.apple.com/library/ios/documentation/uikit/reference/UITableView_Class/Reference/Reference.html#jumpTo_49

https://developer.apple.com/library/ios/documentation/uikit/reference/uiview_class/UIView/UIView.html#jumpTo_65