以编程方式调整 NSTableView 的大小

发布于 2024-12-06 15:17:12 字数 98 浏览 0 评论 0原文

如何实现以编程方式创建的调整 NSTableView 大小的功能?不应使用界面生成器。它应该像单击并拖动来更改 NSTableView 的大小。是否可以?如果是,请帮忙。 。 。 。

How to implement the feature of resizing NSTableView created programmatically ? Interface builder should not be used. It should be like click and drag to change the size of the NSTableView. Is it possible? If yes, please help. . . .

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

你的背包 2024-12-13 15:17:12

恐怕您需要编写一些代码才能使其正常工作。我就是这样做的。

创建一个特殊的调整大小视图,它将跟踪鼠标事件并调用委托方法来提供跟踪位置如何变化。

- (void)mouseDown:(NSEvent *)theEvent
{
    _startPoint = [theEvent locationInWindow];
    [_delegate resizingDidStart];
}

- (void)mouseDragged:(NSEvent *)theEvent
{
    NSPoint hitPoint = [theEvent locationInWindow];
    [_delegate resizeWithDeltaX:(hitPoint.x - _startPoint.x) deltaY:(hitPoint.y - _startPoint.y)];
}

将此视图放在基本视图的右下角。设置自动调整大小蒙版,使该视图始终位于右下角。

将表格视图及其滚动视图放在基本视图上。设置滚动视图的自动调整大小掩码,使其大小和宽度相当。

在 Resize View 的委托过程中,更改鼠标位置并设置 Base View 的框架。

- (void)resizingDidStart
{
    _initialRect = [_baseView frame];
}

- (void)resizeWithDeltaX:(CGFloat)deltaX deltaY:(CGFloat)deltaY
{
    [_baseView setFrame:NSMakeRect(_initialRect.origin.x, _initialRect.origin.y + deltaY, _initialRect.size.width + deltaX, _initialRect.size.height - deltaY)];
}

当然,滚动视图应该位于调整大小视图下方。您可以在调整大小视图等上绘制一些手柄的索引。

I am afraid you need to write a bit of code to make it working. This is how I would do it.

Make a special Resize View that will track the mouse events and call delegate methods providing how the tracking position changes.

- (void)mouseDown:(NSEvent *)theEvent
{
    _startPoint = [theEvent locationInWindow];
    [_delegate resizingDidStart];
}

- (void)mouseDragged:(NSEvent *)theEvent
{
    NSPoint hitPoint = [theEvent locationInWindow];
    [_delegate resizeWithDeltaX:(hitPoint.x - _startPoint.x) deltaY:(hitPoint.y - _startPoint.y)];
}

Put this view in the right bottom corner of the Base View. Set the autoresizing mask so this view always stays in the right bottom corner.

Put the table view along with its scroll view on to the Base View. Set autoresizing mask of the scroll view so its size and width are sizeable.

In the delegate of the Resize View process changes in the mouse position and set the frame of the Base View.

- (void)resizingDidStart
{
    _initialRect = [_baseView frame];
}

- (void)resizeWithDeltaX:(CGFloat)deltaX deltaY:(CGFloat)deltaY
{
    [_baseView setFrame:NSMakeRect(_initialRect.origin.x, _initialRect.origin.y + deltaY, _initialRect.size.width + deltaX, _initialRect.size.height - deltaY)];
}

Of course the scroll view should be under the resize view. You can draw some ind of a handle on the resize view, etc.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文