跟我一起学MAC编程吧(4) 浮动工具窗

跟我一起学MAC编程吧(4)


        可能是感觉到对Coredata略知一二了,重新跟着写Coredata的兴趣突然减小。那么Coredata就往后放一放,这一节,我们来研究一下浮动工具条。其实这也是个不错的东东,而且还相当简单。CSDN 上写博客一个挺大的问题就是源代码,稍微内容多一点的文章,代码就会很长,都贴出来就会让人觉得不舒服,我不知道有没有办法弄个源代码下载。这点我还不懂,有知道的可以指教一下。

         我用VC的时候,几乎没有用过这种浮动工具条。





这样一个工具条,在OS X 里面是一个特殊的窗口: Panel, 你可以建立一个独立空的的Xib文件,然后找到Panel 窗口托进来。

这个窗口有一堆的属性,我测试了其中的一些, 比如你把标题点掉的话,也会正常显示。但是,它就不会浮动的其他窗口的上方了。你还可以试试改变窗口的大小,等等,找到一个合适的方法。

           工具条里面使用的Matrix,大概是矩阵的意思。 这个东西让我花了不少时间,我看到例子里面有这个东西,却无论如何在控件库里面找不到它。我查了许多信息,不少人在找它,同样的一个问题。后来,终于给我找到了。你要先放一个矩形按钮在窗口,选中这个按钮,打开上方的主菜单,【编辑】下面你可以找到Matrix, 点了之后,在看这个按钮的属性,它已经是Matrix了。你可以调整Matrix的个数,也可以设置里面按钮的参数,多试试找到你想要的。你可以为每个按钮添加一个图形,诸如此类。

           建这个例子的时候,我选中了基于文档的模版。你也可以这么做。

           然后向界面添加一个Object对象,将它的类名设置成 MKAppDelegate, 这个类的内容如下:


//  MKAppDelegate.h

//  MyTypset

//

//  Created by wuzhiqiang on 12-12-18.

//  Copyright (c) 2012 wuzhiqiang. All rights reserved.

//


#import <Foundation/Foundation.h>


@interface MKAppDelegate : NSObject

- (IBAction)showOrHideToolPalette:(id)sender;

@end


//  MKAppDelegate.m

//  MyTypset

//

//  Created by wuzhiqiang on 12-12-18.

//  Copyright (c) 2012 wuzhiqiang. All rights reserved.

//


#import "MKAppDelegate.h"

#import "MKToolPaletteController.h"


#pragma mark *** NSWindowController Conveniences ***



@interface NSWindowController(SKTConvenience)

- (BOOL)isWindowShown;

- (void)showOrHideWindow;

@end

@implementation NSWindowController(SKTConvenience)



- (BOOL)isWindowShown {

    

    // Simple.

    return [[self window] isVisible];

    

}



- (void)showOrHideWindow {

    

    // Simple.

    NSWindow *window = [self window];

    if ([window isVisible]) {

        [window orderOut:self];

    } else {

        [self showWindow:self];

    }

    

}

@end



@implementation MKAppDelegate


#pragma mark *** Launching ***



// Conformance to the NSObject(NSApplicationNotifications) informal protocol.

- (void)applicationDidFinishLaunching:(NSNotification *)notification {

    

    // The tool palette should always show up right away.

    [self showOrHideToolPalette:self];

    

}



- (IBAction)showOrHideToolPalette:(id)sender {

    

    // We always show the same tool palette panel. Its controller doesn't get deallocated when the user closes it.

    [[MKToolPaletteController sharedToolPaletteController] showOrHideWindow];

    

}

@end


我们这个AppDelegate是整个应用的控制器。因此,它能够建立和管理跟应用同级别的Window。



将File‘s  Owner 的delegate 设置成我们这个App Delegate对象。如果你愿意,还可以增加一个菜单项,然后跟App里面的那个方法连接。


前面我们说了工具栏xib文件的方法。建立后,按照MVC的原则, 我们建立一个 MKToolPaletteController 类,它是NSWindowController的子类。这个类的内容是这样。


//  MKToolPaletteController.h

//  MyTypset

//

//  Created by wuzhiqiang on 12-12-18.

//  Copyright (c) 2012 wuzhiqiang. All rights reserved.

//


#import <Cocoa/Cocoa.h>


@interface MKToolPaletteController : NSWindowController


+ (id)sharedToolPaletteController;

@end


//  MKToolPaletteController.m

//  MyTypset

//

//  Created by wuzhiqiang on 12-12-18.

//  Copyright (c) 2012 wuzhiqiang. All rights reserved.

//


#import "MKToolPaletteController.h"


@interface MKToolPaletteController ()


@end


@implementation MKToolPaletteController


+ (id)sharedToolPaletteController {

    static MKToolPaletteController *sharedToolPaletteController = nil;

    

    if (!sharedToolPaletteController) {

        sharedToolPaletteController = [[MKToolPaletteController allocWithZone:NULL] init];

    }

    

    return sharedToolPaletteController;

}


- (id)init{

    self = [self initWithWindowNibName:@"ToolsPalette"];

    if (self) {

        [self setWindowFrameAutosaveName:@"ToolsPalette"];

    }

    return self;

}


- (void)windowDidLoad

{

    [super windowDidLoad];

    

    // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.

}


@end


       最后顺便说一下 sharedToolPaletteController 这个方法,在苹果里面这个叫做类方法,基本跟C++里面的静态函数类似。这种方法跟具体的对象无关,它对这个类的所有对象起作用,类方法往往执行静态变量的操作,静态变量可以在类里,这个类的所有对象都使用这一个变量,也可以在方法里面定义。他们的不同之处在于他们的可见性,函数里的静态变量,只在这个函数里可见。外面是看不到的。你不会希望屏幕上出现多个这样的工具条吧?那么这个静态函数与静态变量的使用正合适。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值