【发布时间】:2016-07-20 14:59:58
【问题描述】:
我的 ui 结构就像 NSWindow -> NSViewController -> NSView(parent) -> NSView(target view)。
目标视图是从 XIB 文件中拖动的,而不是 addSubview。 drawRect 函数将在 NSView(parent) 显示时被调用,但之后我想用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 已经连接
【问题讨论】:
-
你是否调用目标视图的
setNeedsDisplay? -
@bluedome,是的,我调用了 setNeedsDisplay 但它不起作用
-
显示调用
setNeedsDisplay:的代码。另外,你确定你是按照你认为的观点来称呼它的吗?那是哪个视图,父视图还是目标视图?会不会是因为您没有正确连接某些东西(例如插座),所以您对该视图的引用是nil?千万不要打电话drawRect;它不会正常工作。 -
@KenThomases,请查看我的更新
-
我可以使用
[self.view setNeedsDisplay:YES]来调用NSView(Parent)的drawRect
标签: cocoa