gpt4 book ai didi

cocoa - 有没有办法检测 NSToolbar 上的溢出

转载 作者:行者123 更新时间:2023-12-03 16:41:21 29 4
gpt4 key购买 nike

我需要检测 NSToolbar 是否已创建(或将创建)溢出菜单,并可能调整窗口大小以使溢出消失。但我找不到一种简单的方法来检测是否发生了溢出。

最佳答案

NSToolbar 有两种方法可以用来解决这个问题。 -items 返回工具栏中的所有当前项目,包括溢出菜单中的项目。 -visibleItems 仅返回可见的项目,不包括溢出菜单中的项目。如果这两个方法返回的数组不匹配(或者只是不包含相同数量的项目),则您知道工具栏已溢出。溢出状态可能会随着窗口大小的调整或向工具栏添加或删除项目而发生变化。所以,你可以这样做:

- (void)checkForToolbarOverflow
{
if ([[self.toolbar items] count] > [[self.toolbar visibleItems] count]) {
NSLog(@"Overflow!");
} else {
NSLog(@"No overflow");
}
}

- (void)windowDidResize:(NSNotification *)notification
{
[self checkForToolbarOverflow];
}

- (void)toolbarDidRemoveItem:(NSNotification *)notification
{
[self checkForToolbarOverflow];
}

- (void)toolbarWillAddItem:(NSNotification *)notification
{
[self checkForToolbarOverflow];
}

这有一个错误,即如果在工具栏末尾添加新项目,则会错误地报告没有溢出,并且该项目会导致溢出。事实证明,当调用 -toolbarWillAddItem: 时,要添加的项目并不在 items 或visibleItems 数组中(如您所料,因为它尚未添加) )。但是,visibleItems 数组已更新以反射(reflect)新的不可见项。只要新项目不是唯一不可见的项目,这种方法就很有效,因为它也不会出现在 items 数组中。

我的解决方法并不理想,但我还没有想出更好的方法。只需在 -toolbarWillAddItem 返回后等待短暂的延迟,为实际添加项目提供时间,然后再次检查是否溢出。

关于cocoa - 有没有办法检测 NSToolbar 上的溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20217637/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com