Как я могу получить видимый прямоугольник UITableView? - PullRequest
11 голосов
/ 21 июля 2011

Я пытаюсь определить, прокрутил ли пользователь до конца UITableView, чтобы я мог сделать некоторые дополнительные вещи.Чтобы правильно рассчитать вещи, мне нужно получить видимый прямоугольник UITableView.Как мне этого добиться?

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{ 

    [_refreshHeaderView egoRefreshScrollViewDidScroll:scrollView];

    int currentMaxPosition = CGRectGetMaxY([self.tableView visibleRect]);
    int currentMinPosition = CGRectGetMinY([self.tableView visibleRect]);

    int tableViewBottom = [self.tableView bounds].size.height - 100;
    int tableViewTop = 0;

    //get older messages once we're near the bottom
    if (currentMaxPosition > tableViewBottom - 100)
    {
        NSLog(@"WE AT THE BOTTOM!");
    }      

}

Ответы [ 5 ]

22 голосов
/ 21 июля 2011

UITableView - это просто подкласс UIScrollView, поэтому применяются все обычные методы UIScrollView, например, видимый прямоугольник UITableView - это просто его границы:

CGRect visibleRect = [myTableView bounds];

Источником visibleRect является просто contentOffset,поэтому вы можете использовать другой подход:

CGFloat distanceFromBottom = [self.tableView contentSize].height - [self.tableView contentOffset].y;
3 голосов
/ 21 июля 2011

Вы можете проверить [tableView visibleCells], чтобы получить видимую ячейку или tableView indexPathsForVisibleRows] и определить, прокручивал ли пользователь до конца.

2 голосов
/ 03 января 2016

Я пытался показать изображение, когда я постучал по ячейке, и я хотел найти рамку, чтобы показать ее (получить текущую позицию таблицы).

Я использовал следующее, и это сработало:

//originalImageViewFrame is the CGRect that I use for my new view that I want to add to the view.
    originalImageViewFrame.origin = CGPointZero;
    originalImageViewFrame.size = self.tableView.contentSize;

Надеюсь, это помогло.

0 голосов
/ 21 июля 2011

Если вы хотите загрузить больше ячеек, когда достигнете дна, попробуйте это post .

В основном вы знаете, сколько строк в настоящее время находится в табличном представлении, сколько разделов и т. Д., Используйте:

- (NSInteger)numberOfSections

- (NSInteger)numberOfRowsInSection:(NSInteger)section

Вы также можете использовать:

- (NSArray *)indexPathsForVisibleRows

, чтобы выяснить пути индекса ячеек возле дна ..

Затем используйте следующий UITableViewDelegate метод:

- (void)tableView:(UITableView *)tableView
  willDisplayCell:(UITableViewCell *)cell
forRowAtIndexPath:(NSIndexPath *)indexPath

и используйте значение indexPath и сравните его с «рядом» с нижними индексами. Если внизу, выполните какое-то действие, например, загрузите больше контента.

Некоторые приложения имеют выделенную ячейку «Загрузить еще ...» для загрузки дополнительного содержимого вручную . Этот подход легче внедрить, и он проверяет функциональность «загрузки дополнительного содержимого» в вашем приложении.

0 голосов
/ 21 июля 2011
    -(void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{

        int i=0;

        i=indexPath.row;

        int count=[urTablearray count];

        if (count == (++i)) {

                //do ur stuff here

        }


    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...