2013-09-16 9 views
2

Я хочу получить позицию UITableVIewCell относительно экрана, а не относительно таблицы. Итак, если я просматриваю таблицу, позиция обновляется.Как получить позицию tableviewcell после прокрутки стола.

+1

Непонятно, о чем вы просите, потому что вы не указали (1), в какое время вы хотите получить позицию, (2) положение той части ячейки, которую вы хотели бы получить, и (3), если ориентация дисплея играет какую-либо роль в ответе, который вы хотите получить. – dasblinkenlight

+1

В целом, когда вы пытаетесь сделать что-то, что трудно достичь, вероятность того, что вы делаете что-то неправильно, очень высока. У вас может быть больше шансов решить проблему, если вы объясните фактическую проблему, которую пытаетесь решить. – dasblinkenlight

ответ

6

Вы должны использовать два шага для достижения этой цели:

  1. Получить CGRect информацию для выбранной ячейки/или нижнего колонтитула с помощью одного из них методы UITableView:
- (CGRect)rectForHeaderInSection:(NSInteger)section; 
- (CGRect)rectForFooterInSection:(NSInteger)section; 
- (CGRect)rectForRowAtIndexPath:(NSIndexPath *)indexPath; 

2. Преобразовать CGRect на вид контейнера таблицы с помощью convertRect метод UITableView «s. Например. чтобы получить текущую позицию первого заголовка можно использовать этот код:

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

Если вы хотите, чтобы эти выше динамически вы можете захотеть включить этот код в метод делегата UITableView в:

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

One пример того, что я сделал с использованием аналогичных методов находится в GitHub - как сделать строку заголовка таблицы исправлено:

https://github.com/codedad/SO_Fixed_TableHeader_iOS

Надеюсь, это вам поможет!

+0

Спасибо! Это помогло ... – Bertges

+0

Это, похоже, не учитывает contentOffset. Если в методе didScroll я записываю прямоугольник конкретной ячейки, он не изменяется при прокрутке –

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; 
} 
0

Используйте метод -[UITableView rectForRowAtIndexPath:]. Имейте в виду, что если вы попытаетесь получить это, когда ячейка выключена, вы получите неожиданные результаты. Затем вы можете преобразовать его в вид контроллера вашего представления (который, я думаю, это то, что вы подразумеваете под экраном) с помощью метода -[UIView convertRect:toView:].

Ref: 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

Смежные вопросы