Как определить, прокрутил ли пользователь до конца NSTableView - PullRequest
6 голосов
/ 10 февраля 2011

У меня есть NSTableView, и я хотел бы знать, когда пользователь прокрутил до конца, чтобы я мог выполнить действие.Не совсем уверен, как это сделать?

ОБНОВЛЕНИЕ: Вот как я вычисляю основание таблицы:

-(void)tableViewDidScroll:(CPNotification) notification
{
    var scrollView = [notification object];
    var currentPosition = CGRectGetMaxY([scrollView visibleRect]);
    var tableViewHeight = [messagesTableView bounds].size.height - 100;

    //console.log("TableView Height: " + tableViewHeight);
    //console.log("Current Position: " + currentPosition);

    if (currentPosition > tableViewHeight - 100)
    {
       console.log("we're at the bottom!");
    }
}

Ответы [ 2 ]

16 голосов
/ 10 февраля 2011

Вы можете добавить себя в качестве наблюдателя (в смысле NSNotificationCenter, а не в смысле KVO / Bindings) NSViewBoundsDidChangeNotification из таблицы -enclosingScrollView -contentView и при необходимости реагировать на основе видимого прямоугольника.

Обновление

Сделайте это где-нибудь (возможно, -awakeFromNib):

// Configure the scroll view to send frame change notifications
id clipView = [[tableView enclosingScrollView] contentView];
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(myBoundsChangeNotificationHandler:)
                                             name:NSViewBoundsDidChangeNotification
                                           object:clipView];

Поместите это где-нибудь полезное:

- (void)myBoundsChangeNotificationHandler:(NSNotification *)aNotification
{

if ([aNotification object] == [[tableView enclosingScrollView] contentView])
    [self doSomethingInterestingIfDocumentVisibleRectSatisfiesMe];

}

По сути, вы хотите изучить свитокпросмотрите -documentVisibleRect, чтобы увидеть, видна ли нижняя пара пикселей.Не забудьте учесть возможность представлений с перевернутыми системами координат - «перевернутые виды» - описанных в Руководстве по программированию Представления .

0 голосов
/ 17 августа 2016

По поводу вашего обновления: по некоторым причинам у меня есть var currentPosition = CGRectGetMaxY ([scrollView visibleRect]); всегда одно и то же значение, я нашел лучше использовать границы NSClipView:

NSClipView *clipView = ...;
NSRect newClipBounds = [clipView bounds];
CGFloat currentPosition = newClipBounds.origin.y + newClipBounds.size.height;
...