解决刷新问题和使用NSToolbar、NSPopupButton、NSMenu 上一篇文章说到使用NSOutlineView来管理跟组的用户,但是存在一个小问题,就是在用户改变整个窗口大小的时候,NSOutlineView的每个Cell不会及时刷新,我自己考虑应该是没能及时把redraw的消息传递过去,可是找了半天没能找到方法把消息传过去,只好请教jjgod了,他给出了方法来解决这个问题。 这应该是一个Cocoa的bug,消息没有传过去,我们只能自己动手了,所以我们需要在自己继承NSOutlineView的myOutlineView中重载drawRect:(NSRect)rect或者是inLiveResize,代码如下: – (void)drawRect:(NSRect)rect { [super drawRect:rect]; } – (BOOL)inLiveResize { return NO; } IM中要显示用户自己的信息,比如说头像或者状态、签名等信息,这些信息一般都显示在窗口的最上方,怎么显示这些信息呢?只看位置,最直观的想法就是使用Toolbar了,由于Cocoa提供了很方便的Toolbar接口,所以也就很容易实现这一功能了。 我们要让NSToolbar显示自己定义的信息,那么我们必须自己定义一个NSView作为NSToolbarItem,这个很容易做到: 首先在Interface Builder中建立一个NSView 然后加入自己需要的一些控件,比如Image,NSPopupButton等 然后实现NSToolbar的delegate函数:toolbar:itemForItemIdentifier: willBeInsertedIntoToolbar:、toolbarDefaultItemIdentifiers:和toolbarAllowedItemIdentifiers: 在函数toolbar:itemForItemIdentifier: willBeInsertedIntoToolbar:中,按照需要,如果需要返回自定义的NSToolbarItem,那么就把这我们自定义的View传给NSToolbarItem的setView:消息 这样,程序就可以显示我们自定义的用户信息了。 在我们自定义的显示用户信息视图中,我们需要用到NSPopupButton,这个控件使我们用来调整用户状态的,很有用途,这个控件实际上就是一个NSButton加一个NSMenu,我们需要做的就是自己定义NSMenu: 首先,我们定义一个NSMenu,可以使用Interface Builder,也可以使用程序控制生成 然后为每一个NSMenuItem加入Image属性,这样有比较好的视觉效果 然后为每一个NSMenuItem设置响应函数,把要响应的函数传递给setAction:消息,注意在传递这个消息之前,先要设置Target 好了,来看看最终的结果吧!
-
Pages
-
Tags
-
Recent Posts
-
Recent Comments