Cocoa Objective-C添加子视图

时间:2011-02-02 01:24:10

标签: cocoa nsview subview

我有一个游戏应用程序(可可,不是可可触摸),我正在尝试添加地图元素。我的应用程序窗口名为mainWin。我有一个名为viewGameMap的mainWin子视图,我在IB中添加了它。我有一个叫做room.h / room.m的课程,它基本上会在应用程序中为房间的宽度和高度生成尺寸。

我可以这样做:

room* thisRoom = [[room alloc] initWithFrame: NSMakeRect(441.0-roomWidth,520.0-roomLength, roomWidth * 10, roomLength * 10)];
[[mainWin contentView] addSubview:thisRoom];

但我真的想将这个子视图添加到viewGameMap,我可以子视图子视图吗?在IB中,我注意到子视图没有contentView,所以我不确定如何将它放在那里。

在一个相关的问题中,这些房间视图不会是永久性的,所以一旦我完成它们,我该如何销毁它们。

由于

1 个答案:

答案 0 :(得分:1)

首先,如果你在.h文件中声明viewGameMap,就像这样(使用@property指令):

@property (nonatomic, retain) IBOutlet UIView   *viewGameMap;

甚至只是在实际的声明中,像这样:

IBOutlet UIView *viewGameMap;

然后你应该能够将viewGameMap绑定到IB中适当的UIView。这将使您可以直接访问viewGameMap。

其次,由于你使用alloc实例化你的Room对象(n.b.,类Room应按照约定大写),你负责它(你拥有它)。但是当你调用-addSubview:时,[mainWin contentView] 拥有thisRoom。所以,你可以这样做:

room* thisRoom = [[room alloc] initWithFrame: NSMakeRect(441.0-roomWidth,520.0-roomLength, roomWidth * 10, roomLength * 10)];
[viewGameMap addSubview:thisRoom];
[thisRoom release];

稍后,当从[mainWin contentView]中删除thisRoom时,其引用计数(禁止其他一些引用)将降为零,最终将被取消分配。