2011-02-10 12 views
6

Ho un NSTableView e vorrei sapere quando l'utente ha fatto scorrere verso il basso, così posso eseguire un'azione. Non sei abbastanza sicuro di come andare su questo?Come determinare se un utente ha spostato fino alla fine di un NSTableView

UPDATE: Ecco come sto calcolando la parte inferiore della tabella:

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

risposta

14

È possibile aggiungere te stesso come un osservatore (in senso NSNotificationCenter, non il senso KVO/Associazioni) del NSViewBoundsDidChangeNotification dal table's -enclosingScrollView's -contentView e reagisce se necessario in base al rettangolo visibile.

Aggiornamento

Fate questo da qualche parte (forse -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]; 

mettere questo da qualche parte utile:

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

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

} 

In sostanza si desidera esaminare della vista di scorrimento -documentVisibleRect da vedere se forse la coppia di pixel in basso è visibile. Ricordarsi di tenere conto della possibilità di viste con sistemi di coordinate capovolte - "viste capovolte" - coperte nello Views Programming Guide.

+0

Potete mostrare un frammento? –

+0

Ho aggiornato il post. –

+0

Funziona bene, puoi aiutarmi un po 'a calcolare se i pixel in basso sono visibili? –

0

Per quanto riguarda l'aggiornamento: per alcuni motivi ho var currentPosition = CGRectGetMaxY ([scrollView visibleRect]); sempre lo stesso valore, ho trovato meglio utilizzare NSClipView limiti:

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