我的ui结构就像NSWindow - > NSViewController - > NSView(父母) - > NSView(目标视图)。
目标视图是从XIB文件拖出的,而不是addSubview
。显示NSView(父级)时将调用drawRect
函数,但之后我想用setNeedsDisplay
以编程方式再次调用drawRect,它不起作用。
我的方法有什么问题?
无论如何,我可以使用drawRect(view.frame)来实现它,但我认为这不是一个好主意。
代码:
MyView.m
- (void)drawRect:(NSRect)dirtyRect {
[super drawRect:dirtyRect];
NSLog(@"asasa");
}
...
@property (weak) IBOutlet MyView *titleBarView;
...
-(IBAction)test:(id)sender
{
NSLog(@"%@",self.view.subviews); // contains the titleBarView
NSLog(@"%@",self.titleBarView); // not nil
[self.titleBarView setNeedsDisplay:YES]; // not call drawRect
}
titleBarView已经连接
答案 0 :(得分:1)
您现在正在执行的操作会触发drawRect:
的{{1}},而不是self.titleBarView
。要触发self.view
drawRect:
self.view
声明的NSLog
,请在setNeedsDisplay
上致电self.view
。
- (void)drawRect:(NSRect)dirtyRect {
[super drawRect:dirtyRect];
NSLog(@"asasa");
}
...
@property (weak) IBOutlet MyView *titleBarView;
...
-(IBAction)test:(id)sender
{
NSLog(@"%@",self.view.subviews); // contains the titleBarView
NSLog(@"%@",self.titleBarView); // not nil
[self.titleBarView setNeedsDisplay:YES]; // this triggers the drawRect: method of self.titleBarView
[self.view setNeedsDisplay:YES]; // this triggers your drawRect: method with he NSLog statement
}