今天在码代码的时候遇到了标签在修改了内容后没有重绘的问题,试了n种办法,查了老半天,结果终于找到了比较好的解决方法。
首先,要说明,下面这样的方法是不能让Label(NSTextField
)立刻重绘的:
1 2 |
|
今天在码代码的时候遇到了标签在修改了内容后没有重绘的问题,试了n种办法,查了老半天,结果终于找到了比较好的解决方法。
首先,要说明,下面这样的方法是不能让Label(NSTextField
)立刻重绘的:
1 2 |
|
Gravatar是一个非常流行的头像服务,可以根据用户的Email获取头像。下面一段简单的代码展示了如何在Cocoa里使用Gravatar。简单的界面测试:
字符串或数据的MD5哈希值是非常常用的。在Cocoa里很容易实现。因为这类方法非常好用,因此可以做一个NSString
或NSData
的Catagory。如下:
NSString:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
在写程序的时候,我们往往需要把窗口放在屏幕中央。方法其实很简单,代码如下:
1 2 3 4 5 6 7 8 |
|
如果程序只有一个窗口,那么这段代码也可以放在AppDelegate
的-applicationDidFinishLaunching:
方法里。如果放在-applicationDidFinishLaunching:
里,很可能会引起窗口“闪”到屏幕中央(除非程序特别小,小到几乎无需初始化),因此,放在-awakeFromNib
里才是正确的做法。
2011-08-15更新:
事实上NSWindow
已经有了一个专门的方法来处理窗口居中的:- (void)center
。
1 2 3 |
|
不仔细看文档害死人啊!
(全文完)
根据SubView的大小动态的改变窗口大小的操作在Cocoa编程里很常用。记录方法如下。下面的代码假定通过一个Box容器,分别容纳不同大小的SubView,在切换SubView的时候,窗口的大小适应容器大小的变化。SubView的容器可以是任何NSView
。这个代码通常放在Controller
里。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
(全文完)
NSOpenPanel
和NSSavePanel
从Mac OS X 10.6开始把很多方法都标记为了Deprecated,文档里也很详尽的给出了替代方法。
比如,要打开一个选文件的ModalView,以前是用NSOpenPanel
的– beginSheetForDirectory:file:types:modalForWindow:modalDelegate:didEndSelector:contextInfo:
方法。现在,必须用新的方法替代。示例代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
用这个新方法利用了Objective-C 2.0的新特征:Block。在引入了Block之后,这个方法也就变成了多线程的了——这是Grand Central Dispatch的使用实例之一。
这段代码的调试输出如下(多线程):
1 2 3 4 5 6 7 |
|
详情参考ADC文档:在这里。
Updated:另外,值得注意的是,NSOpenPanel
是NSSavePanel
的子类。
(全文完)