gpt4 book ai didi

objective-c - 更改 View 会将它们重新定位在 (0,0)

转载 作者:行者123 更新时间:2023-12-03 17:12:50 25 4
gpt4 key购买 nike

我创建了一个简单的窗口,目的是成为“向导”(我知道苹果指南基本上禁止你这样做,我试图说服客户,但无论如何。

这只是一个简单的 View ,里面有两个自定义 View ,一个位于底部,包含“上一页”和“下一页”按钮,顶部有一个更大的 View ,占据了大部分空间。

我将底部 View 称为“NavigationView”,将顶部 View 称为“ContainerView”。

我创建了一个数组来保存用户应该使用“下一个”和“上一个”按钮导航的一系列 View 。

所以,这是我的代码。

- (IBAction) next:(id)sender{
currentViewIndex++;
[self animatePushView:YES];
}

- (IBAction)previous:(id)sender{
currentViewIndex--;
[self animatePushView:NO];
}

- (void) animatePushView:(BOOL)forward{
NSView *nextView = [viewCollection objectAtIndex:currentViewIndex];

for (NSView *subView in [containerView subviews]) {
[subView removeFromSuperview];
}

[containerView addSubview:nextView];
[nextView setFrame:containerView.bounds];

[containerView setNeedsDisplay:YES];

}

我认为这非常简单。我有一个数组,其中包含下一个要显示的 View 。

发生的情况是,我发现下一个 View 位于 ContainerView 的左下部分中心。为什么会出现这种情况?

此外,正如您可能已经猜到的那样,尽管我已经在 Objective-C 上工作了一段时间,但我还是管理 View 方面的新手,因此,如果我缺少一些最佳实践,我会持开放态度给建议。谢谢!

编辑:

我忘了补充:其中一些 View 具有不同的大小,我希望能够根据 View 大小更改窗口大小。

最佳答案

[nextView setFrame:containerView.bounds];

您正在将容器 View 边界分配给下一个 View 框架 ( doc )。
您可能想要的是将当前 View 框架分配给下一个 View 框架,并可能调整宽度和高度。

保留对当前显示 View 的引用,如下所示(_currentView 是 NSView * 类型的 ivar):

- (IBAction) next:(id)sender{
currentViewIndex++;
[self animatePushView:YES];
}

- (IBAction)previous:(id)sender{
currentViewIndex--;
[self animatePushView:NO];
}

- (void) animatePushView:(BOOL)forward{
NSView *nextView = [viewCollection objectAtIndex:currentViewIndex];
[nextView setFrame:_currentView.frame];

[_currentView removeFromSuperview]; // _currentView is retained in the collection
[containerView addSubview:nextView];
_currentView = nextView;

[containerView setNeedsDisplay:YES];
}

关于objective-c - 更改 View 会将它们重新定位在 (0,0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16459674/

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