2011-02-10 3 views
6

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

UPDATE: Вот как я вычисления нижней части таблицы:

-(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!"); 
    } 
} 

ответ

14

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

Update

ли это где-то (возможно, -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, чтобы увидеть если возможно нижняя пара пикселей. Не забывайте учитывать возможность просмотра с перевернутыми системами координат - «перевернутые виды» - покрыты в Views Programming Guide.

+0

Можете ли вы показать отрывок? –

+0

Я обновил сообщение. –

+0

Это хорошо работает, можете ли вы немного помочь мне рассчитать, видны ли нижние пиксели? –

0

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

NSClipView *clipView = ...; 
NSRect newClipBounds = [clipView bounds]; 
CGFloat currentPosition = newClipBounds.origin.y + newClipBounds.size.height; 
Смежные вопросы