为了在不发布代码页的情况下了解我在做什么……我有一个NSOperation,用于将文件添加到文件夹时对其进行处理。在该NSOperation中,无论何时启动新作业,我都使用NSNotificationCenter向NSView发送通知。我的想法是,我想添加一个新的子视图,以向我提供有关刚刚开始的工作的一些信息。问题是我似乎无法绘制新的子视图。这就是我现在所拥有的。
- (void)drawRect:(NSRect)dirtyRect
{
NSLog(@"Draw Count %i", [jobViewArray count]);
int i = 0;
while (i < [jobViewArray count]) {
[self addSubview:[jobViewArray objectAtIndex:i]];
}
}
然后进一步向下:
-(void) newJobNotification: (NSNotification *) notification
{
if (!jobViewArray)
jobViewArray = [[NSMutableArray alloc] init];
++jobCount;
NSRect rect;
rect.size.width = 832;
rect.size.height = 120;
NSPoint point = { 0, ((jobCount * 120) - 120) };
rect.origin = point;
ProgressView *newJob = [[ProgressView alloc] initWithFrame:rect];
[jobViewArray addObject:newJob];
NSLog(@"Notice Count %i", [jobViewArray count]);
}
}
当我使用我的应用程序添加作业时,NSView会正确接收通知,子视图会正确添加到
jobViewArray
,但是当再次调用drawRect:
时,我的jobViewArray
为空。这是我第一次尝试做这样的事情,所以我可能在这里做的事情完全错了。我想这没有说出来,因为它行不通了吧? 最佳答案
您不应该将子视图添加到drawRect:中的视图。当您收到通知时,应在此处添加子视图,因为第二次出现通知时,您将添加2个子视图,然后添加下一个3个子视图,以此类推。
如果在通知中添加子视图,则无需弄乱数组。
关于objective-c - NSView和动态加载 subview ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6672041/