読み込んでいます...

Text View算是Mac里面最常用但是最复杂的控件之一,我也是用了一下午的时间才知道如何使用这个控件,Mac控件并不像VC或者C#一样直观上是消息通信模式,也不是通过事件,添加相应对象的子节点去增加控件内容。Text View算是比较特别的控件,复杂的Text View控件可以做出很多复杂的效果,在iPhone上更是如此,最有名的软件如Twitterrific的Mac版本和iPhone版本显示Twits都是使用的Text View。Text View就好像C#中的Gridview,或者C++的listbox。

首先我们创建一个项目叫TextViewTest,创建好之后,我们在Class文件夹下面添加一个类,取名叫Controller(这里可以创建位NSObject或者位NSView的子类都可以)。

创建好之后,我们打开MainWindow.xib文件,然后制作UI如下图所示,我们的需求很简单,单击按钮添加一行数据。

编写好了UI之后,我们就需要连接一些基本的东西,这里我们拖动一个Object对象进来,并改成相应的Class。

拖动过来还需要更改为相应的Controller。

更改后,我们的这个Controller就是我们的Controller类的一个对象了。这里我们需要写一下Controller类,头文件我们可以定义如下。

#import <Cocoa/Cocoa.h>

@interface Controller : NSView {
    //定义数据源数组
    NSMutableArray *array;
    
//定义数据
源数组的Controller,连接用
    IBOutlet NSArrayController *arrayController;
    IBOutlet NSButton
*button;

}

@property (nonatomic,retain) IBOutlet NSButton
*button;

- (void) buttonClicked:(id)sender;

@end

然后我们实现的代码很简单,每次点击都添加一个test字符串。

#import "Controller.h"

@implementation Controller

@synthesize button;

- (void) buttonClicked:(id)sender
{
    
//添加字符串
    [arrayController addObject:@"test"];
}

- (id)initWithFrame:(NSRect)frame {
    self
= [super initWithFrame:frame];
    
if (self) {
        
// Initialization code here.
    }
    
return self;
}

- (void)drawRect:(NSRect)dirtyRect {
    
// Drawing code here.
}

@end

编写完成后,我们还需要连接各个对象,例如button连接到代码中的button,button的按下的事件连接到buttonClicked。这里我就不累述了。

Text View是一个可以进行数据绑定的控件,所以前面我才说和C#的GridView很像,不过没有VS那么智能了,这里Text View绑定的是类似数组的对象,所以这里我们还需要拖动一个Arrray Controller,进行数据的连接。

拖动完成之后,我们就需要连接Controller和Array Controller,这两个对象组成一个类+数据源的结构。

拖动完成后,我们需要绑定相应的对象,例如上面绑定的是arrayController,也是我们前面代码定义的一个变量,否则看不到这个连接项。这个时候我们连接前面定义的arrayController,就连接了Array Controller。连接后,我们还需要设置绑定,我们在Array Controller的属性窗口中设置即可。

上图我们就将Array Controller绑定了Controller里的array变量。也就是说Array Controller现在已经成为了数据源,任何array对象的改变都会影响到这个Array Controller。

现在我们再打开UI,找到相应的一列,选中该列(而不是选中大的控件,是其中一列,如下图)。

选中该列,然后在属性窗口中绑定相应的数据源即可,如下图。

绑定完成后,我们只需要操作arrayController里面的元素就可以了,而不需要关心如何绑定到Text View中的,如下代码。

[arrayController addObject:@"test"];

 连接完成后的Controller和Array Controller里的连接如下两图所示。

小结一下:

使用Text View的基本步骤如下。

  • 写Controller,并连接。
  • 创建Array Controller并绑定。
  • 绑定相应的Text View的列。

虽然看上去很简单,但是实践起来还是有一定难度的,建议各位自己动手实践一下。

TextViewTest.zip (29.47 kb)

560路过 3评论 Mac开发 阅读全文..
  1. Mac开发 – Table View(3) : GuoJing's Blog | 用心对待每一行代码 @

    [...] 在读本篇文章之前,推荐先看看Mac开发 – Table View(1)和Mac开发 – Table View(2),前两篇文章分别讲解了TableView的一些基本功能和绑定方法,当只有一列的时候,我们可以通过ArrayController的方法绑定,当有两列的时候,我们可以通过Dictionary的方法绑定,但是有多列的时候,我们并不好绑定,现在我就来说说用对象和ArrayController的方法绑定,同时,我们这次实现的程序要复杂一点。 [...]

  2. affirm @

    刚在做mac,很不适应啊,谢谢你的文章
    在学日语啊,呵呵

:-D :-? 8) :cry: 8-O :lol: :-x :-| :?: :-P :oops: :roll: :( :) :-o :wink: more »