【问题标题】:Detecting Vertical NSScroller hitting bottom in NSTableView检测垂直 NSScroller 在 NSTableView 中触底
【发布时间】:2014-10-20 21:18:39
【问题描述】:

假设我在 awakeFromNib: 的表中加载了 100 行,现在我想在垂直滚动条到达底部时调用一个方法。谁能告诉我如何处理 NSScroller 触底事件并在发生这种情况时调用方法。

【问题讨论】:

    标签: cocoa nstableview nsscrollview nsscroller


    【解决方案1】:
    // In awakeFromNib:
    self.scrollView = [self.tableView enclosingScrollView];
    
    // Register delegate to the scrollView content View:
    // This will send notification whenever scrollView content view visible frame changes.
    [NSNotificationCenter.defaultCenter addObserver:self selector:@selector(scrollViewDidScroll:) name:NSViewBoundsDidChangeNotification object:self.scrollView.contentView];
    
    // This Method is called when content view frame changed
    - (void)scrollViewDidScroll:(NSNotification *)notification {
        NSScrollView *scrollView = self.scrollView;
        // Test if bottom of content view is reached.
        CGFloat currentPosition = CGRectGetMaxY([scrollView visibleRect]);
        CGFloat contentHeight = [self.tableView bounds].size.height - 5;
    
        if (currentPosition > contentHeight - 2.0) {
            // YOUR ACTION
        }
    }
    // Remove observer
    - (void)dealloc {
        [[NSNotificationCenter defaultCenter] removeObserver:self];
    }
    

    【讨论】:

    • 为什么你在 NSScrollView *scrollView = [notification object]; ??
    • 我正在调用一种方法来加载更多行,因为 if 条件满足(在“您的操作”部分中)但随着新行的加载(通过 reloadData: 方法)现有行向上跳跃并且它在我看来不是一个流畅的滚动,你能帮我解决这个问题吗..
    【解决方案2】:

    您可以通过检查 tableView.enclosureScrollView.verticalScroller?.floatValue == 1 来检测底部的滚动视图,因为垂直滚动条的 floatValue 在 0 和 1 之间变化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-09
      • 1970-01-01
      • 2017-11-09
      • 2019-04-30
      • 2019-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多