Cocoa学习

我的Cocoa/Cocoa Touch学习笔记

强制Label(NSTextField)重绘

今天在码代码的时候遇到了标签在修改了内容后没有重绘的问题,试了n种办法,查了老半天,结果终于找到了比较好的解决方法。

首先,要说明,下面这样的方法是不能让Label(NSTextField)立刻重绘的:

1
2
[someLabel setStringValue:@"Some new text"];
[someLabel setNeedsDisplay:YES];

正确的做法是:

1
2
[someLabel setStringValue:@"Some new text"];
[someLabel displayIfNeeded];

这两个方法看起来似乎差不多,不过仔细读读,还是能体会到差别的。-setNeedDisplay:是告诉NSTextField实例,我需要重绘了(但是什么时候重绘,则不一定是现在)。而-displayIfNeeded的意思是,如果需要(这里肯定是需要的,因为我们修改了标签的文字),马上重绘。

这个做法参考了苹果官方文档的问答里的NSProgressIndicator的重绘有关的提问(详细)。

(全文完)

Comments