Chinaunix首页 | 论坛 | 博客
  • 博客访问: 189889
  • 博文数量: 60
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 385
  • 用 户 组: 普通用户
  • 注册时间: 2013-02-19 21:43
个人简介

readonly

文章分类

全部博文(60)

文章存档

2013年(60)

我的朋友

分类: 其他平台

2013-02-21 00:51:27

本例带您实现一个简单的例子,这个例子并不能做太复杂的事情,您可以从 Finder 中拖拽 任何文件到列表里,拖拽后,文件名将会添加在列表中。

您可以在这个例子里学习 NSTableView、绑定以及剪贴板的简单使用方法。

首先在 Interface Builder 中拖进一个 Table View,拖进一个 Object 改名为 Controller, 再拖进一个 Array Controller。

在 Controller 里添加一个叫做 arrayController 的 outlet,用菜单中的 Write Class 自动 生成代码并添加至工程中,将 arrayController 从 id 类型改为 ArrayController *。接着 把这个 outlet 和 Array Controller 连接起来。

将 Array Controller 绑定至 Controller,将 Model Key Path 改为 filenames。

将 Table View 的类改名为 DragDropTableView,我们要 subclass 这个 TableView,用于接 受拖拽,同时将 Table View 的 delegate 设置为 Controller。将这个类 Write Class 保存 并添加至工程中。

接着选中 Table View 的第一列,将其绑定到 Array Controller 上。这样,Array Control ler 的任何变化,都将自动反应到这一列中。

由于我们已经将要实现在 Table View 中添加内容,只需要调用如下方法:

- (void) acceptFilenameDrag:(NSString *) filename {

[arrayController addObject:filename]; }

即可在列表中增加一行文件名。
要使 View 支持接受拖拽,在 DragDropTableView.m 中,需要实现以下操作: 首先在 awakeFromNib 里,需要打开接受拖拽。



[self registerForDraggedTypes:[NSArray arrayWithObjects:NSFilenamesPboardType, nil]]; 以及如下方法:

- (BOOL)performDragOperation:(id )sender {

    int i;
    NSPasteboard *pboard;
    pboard = [sender draggingPasteboard];
    if ([[pboard types] containsObject:NSFilenamesPboardType]) {

         id delegate = [self delegate];
         NSArray *filenames = [pboard propertyListForType:NSFilenamesPboardType];

         if ([delegate respondsToSelector:@selector(acceptFilenameDrag:)]){




            for (i=0;i<[filenames count];i++) {

                [delegate performSelector:@selector(acceptFilenameDrag ames objectAtIndex:i]];

            }

         }

        return YES;

     }

    return NO;

 } 




阅读(1314) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~