【发布时间】:2012-05-01 18:33:19
【问题描述】:
我正在尝试创建一个 Cocoa UI,它由两组正方形(类似国际象棋的网格)组成,当底层算法运行时它们会呈现不同的颜色。当算法的执行结束时,UI 应该能够处理点击、平移和其他手势。
我目前的层次结构如下(具体请查看附件代码):
1) 作为窗口控制器的窗口的主窗口
2) 具有两个自定义视图 mainView 和 sideView 的拆分视图(每个视图都包含一组正方形)
3)两个视图控制器(mainViewController和sideViewController)
我希望能够将方块加载为 mainView 和 sideView 的子视图。
我想有另一个自定义视图,比如 SquareView 和另一个 nib 文件。我的问题是:
a) 我如何创建这个 SquareView 以便它可以用于创建将作为子视图添加到 mainView 和 sideView 以形成类似象棋的网格的正方形?
b) 如何将子视图添加到 mainView 和 sideView 以构建两个网格?为简单起见,我们假设前面提到的每个视图都有四个不重叠的正方形。
谢谢!
MainView.m
#import "MainView.h"
@implementation MainView
- (void)drawRect:(NSRect)TheRect
{
[[NSColor grayColor] set];
[NSBezierPath fillRect:[self bounds]];
}
SideView.m
#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];
}
【问题讨论】:
标签: cocoa nsview subview nsviewcontroller