我正在尝试创建一个由两套正方形(类似象棋的网格)组成的Cocoa UI,当底层算法运行时,它们将采用不同的颜色。当算法执行结束时,UI应该能够处理单击,平移和其他手势。

到目前为止,我的层次结构如下(请检查随附的代码以获取详细信息):

1)主窗口即窗口控制器的窗口

2)包含两个自定义视图mainView和sideView的拆分视图(每个视图将容纳一组正方形)

3)两个视图控制器(mainViewController和sideViewController)

我希望能够将正方形加载为mainView和sideView的子视图。

我想到了另一个自定义视图,例如SquareView和另一个nib文件。我的问题是:

a)如何创建此SquareView,以便可用于创建将作为子视图添加到mainView和sideView的正方形,以形成象棋一样的网格?

b)如何将子视图添加到mainView和sideView中以构建两个网格?为了简单起见,让我们假设每个前面提到的视图都有四个不重叠的正方形。

谢谢!



主视图

#import "MainView.h"


@implementation MainView

- (void)drawRect:(NSRect)TheRect
{
    [[NSColor grayColor] set];
    [NSBezierPath fillRect:[self bounds]];
}


侧面视图

#import "SideView.h"


@implementation MainView

- (void)drawRect:(NSRect)TheRect
{
    [[NSColor whiteColor] set];
    [NSBezierPath fillRect:[self bounds]];
}


MainWindowController.h

#import <Cocoa/Cocoa.h>

@class SideViewController;
@class MainViewController;

@interface MainWindowController : NSWindowController
{
    IBOutlet NSSplitView* oMainSplitView;
    SideViewController* sideViewController;
    MainViewController* mainViewController;

}

@end


MainWindowController.m

#import "MainWindowController.h"
#import "SideViewController.h"
#import "MainViewController.h"

@implementation MainWindowController

- (void)windowDidLoad
{

   sideViewController = [[SideViewController alloc] initWithNibName:@"SideView" bundle:nil];
   NSView* splitViewLeftView = [[oMainSplitView subviews] objectAtIndex:0];
   NSView* sideView = [sideViewController view];
   [sideView setFrame:[splitViewLeftView bounds]];
   [sideView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)];
   [splitViewLeftView addSubview:sideView];

   mainViewController = [[MainViewController alloc] initWithNibName:@"MainView" bundle:nil];
   NSView* splitViewRightView = [[oMainSplitView subviews] objectAtIndex:1];
   NSView* mainView = [mainViewController view];
   [mainView setFrame:[splitViewRightView bounds]];
   [mainView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)];
   [splitViewRightView addSubview:mainView];
}

最佳答案

您可以根据自己的意愿使它变得简单或复杂:简单吗?在MainView的drawRect方法中做您想做的一切;复杂:嵌套NSViews(或NSCell或NSBox等),并绘制每一个。

就个人而言,我将投票保持简单……

关于cocoa - 向NSView添加 subview 以具有象棋一样的网格,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10402378/

10-10 20:35