首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSSplitView折叠事件

NSSplitView折叠事件
EN

Stack Overflow用户
提问于 2016-06-12 07:12:43
回答 3查看 511关注 0票数 0

我正在尝试实现一个类似于Xcode的NSSplitView,您可以通过将视图的句柄拖动到宽度的一半以下来折叠视图,视图将自动折叠。我让该部分正常工作,但当发生这种情况时,我需要更新工具栏中按钮的状态。我尝试侦听splitViewDidResizeSubviews并检查拆分视图的视图是否折叠,但该方法触发了16次,折叠的==为真,所以我不想16次更新按钮的状态。有没有更干净的方法来做这件事?我是Cocoa的新手,但从我所看到的情况来看,我希望有某种方法来说明将此按钮的状态绑定到isCollapsed属性并完成它。这样的事情真的存在吗?

EN

回答 3

Stack Overflow用户

发布于 2020-07-14 16:31:07

如果将NSSplitViewController子类化,则可以为SplitViewItem的isCollapsed属性添加侦听器:

代码语言:javascript
复制
class MySplitViewController: NSSplitViewController {

    var observer: NSKeyValueObservation?

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do view setup here.

        let sideViewSplitViewItem = splitViewItems[0]

        observer = sideViewSplitViewItem.observe(\.isCollapsed, options: [.initial, .new]) {splitViewItem, _ in
            print("Sidebar collapsed state changed to: \(splitViewItem.isCollapsed)")
        }
    }

}
票数 1
EN

Stack Overflow用户

发布于 2016-06-13 03:40:28

查看可用的绑定的最好方法是检查文档,特别是Cocoa Bindings Reference (在侧边栏中查找您想要的视图)。

NSSplitView没有您所描述的绑定,所以我认为您当前的方法是正确的。当然,你不需要更新按钮的状态16次,只需每次检查它的值,并在需要时更新它。这可能看起来有点浪费,但检查bool的值是一个非常廉价的操作,而且您不会注意到任何类型的性能影响。

票数 0
EN

Stack Overflow用户

发布于 2019-09-04 14:41:27

NSSplitView的一个子视图被“折叠”时,它没有event或observable属性,而immediate子视图本身将其hidden属性设置为YES

因此,您可以自己观察子视图的hidden属性,或者如果您正在创建自己的NSView自定义子视图,则可以覆盖-(void) setHidden:(BOOL)hidden来捕获事件。

我使用的是后者,它每次都能正常工作。

代码语言:javascript
复制
-(void)setHidden:(BOOL)hidden
{
    [super setHidden:hidden];

    // Insert code to react to the "collapsed" event here.
    // (You're likely going to tell your parent view,
    // self.window.windowController, or something.)
}

当然,setHidden方法/ hidden属性在理论上可以被调用,而不是为了NSSplitView“折叠”视图的目的,但这在实践中发生的可能性很小。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37769287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档