MAC Tree 实现的方法(NSOutlineView) 1

1.将NSOutlineView控件放在xib界面上

2.增加一个类,让这个类通过控件delegate和控件NSOutlineView绑定DataSource,这样这个表格就会显示这个类所指定的数据。

在这类里面需要在里面增加协议

<NSOutlineViewDataSource>

然后增加必须写的几个函数:

#pragma mark -

#pragma mark ***** Required Methods (unless bindings is used) *****

- (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item;

- (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item;

- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item;

- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn
*)tableColumn byItem:(id)item;

实现结果如图:

一个Teacher表示根目录

三个班级,表示老师教了三个班级

以下是源代码:

H代码

//  TreeGroup_DS.h
//  Created by DMD on 24/9/14.

#import <Foundation/Foundation.h>

@interface TreeGroup_DS : NSObject <NSOutlineViewDataSource>
{
    //For NSoutlineView Level 1 Items
    NSArray *_topLevelItems;

    //For NSoutlineView child items
    NSMutableDictionary *_childrenDictionary;

    // Control NSOutlineView
    IBOutlet NSOutlineView *_outline_view_1;
}
@end

M代码

//
//  TreeGroup_DS.m
//  Created by DMD on 24/9/14.

#import "TreeGroup_DS.h"

static NSString *root_name [email protected]"刘老师";

@implementation TreeGroup_DS

- (IBAction)OnClick_BT_Refresh:(id)sender
{
    // Group Names
    _topLevelItems = [[NSArray arrayWithObjects:root_name,nil] retain];
    _childrenDictionary = [NSMutableDictionary new];

    // Group1 Children
    [_childrenDictionary setObject:[NSArray arrayWithObjects:@"四年级1班", @"二年级5班",@"一年级1班",nil] forKey:root_name];

    [_outline_view_1 sizeLastColumnToFit];
    [_outline_view_1 reloadData];
    [_outline_view_1 setFloatsGroupRows:YES];
    [_outline_view_1 setRowSizeStyle:NSTableViewRowSizeStyleDefault];

    // Expand all the root items; disable the expansion animation that normally happens
    [NSAnimationContext beginGrouping];
    [[NSAnimationContext currentContext] setDuration:0];
    [_outline_view_1 expandItem:nil expandChildren:YES];
    [NSAnimationContext endGrouping];
}

- (void)dealloc
{
    [_topLevelItems release];
    [_childrenDictionary release];
    [super dealloc];
}

// Must be function
- (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item
{
    return [[self _childrenForItem:item] objectAtIndex:index];
}

- (NSArray *)_childrenForItem:(id)item
{
    NSArray *children;
    if (item == nil)
    {
        children = _topLevelItems;
    }
    else
    {
        children = [_childrenDictionary objectForKey:item];
    }
    return children;
}

// Must be function
- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item
{
    if ([outlineView parentForItem:item] == nil)
    {
        return YES;
    }
    else
    {
        return NO;
    }
}

// Must be function
- (NSInteger) outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item
{
    return [[self _childrenForItem:item] count];
}

// Must be to show item name
- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item
{
    id objectValue = nil;
    objectValue = item;
    return objectValue;
}

@end

总结:这是一个一个最简单的固定数据的Tree,对Tree没有做动态变化,还需要完善代码。只是初步了解Tree。

注意要控件选择:Cell Base,否则不会显示数据

以上2014-9-24 BY DMD总结

时间: 2024-08-30 14:04:44

MAC Tree 实现的方法(NSOutlineView) 1的相关文章

MAC Tree 实现的方法(NSOutlineView) 2 (实现了简单的选择和动态修改不同的数据)

在MAC Tree 实现的方法(NSOutlineView) 1 的基础上增加如下 协议增加为: <NSApplicationDelegate, NSOutlineViewDelegate, NSOutlineViewDataSource, NSMenuDelegate> 需要注意的事情是:控件的Delegate需要和类绑定,之前我们已经绑定了DataSource,都绑定同一个类 主要是为了实现选择功能: // 这个函数必须让控件的数据Delegate和此类绑定(即不光控件的数据源和该类绑定,

Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验

Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单总结一下成功安装方法: 1,Vmware Player 12.1.1-3770994(Virtual Box 老版本Win10上启动不了,新版本5.1不再支持Mac OS) 2,执行命令关闭Hyper-v服务重启:bcdedit /set hypervisorlaunchtype off (不然无法

虚拟集群通过ip或mac查找虚拟机名称方法

当虚拟集群比较大,上面虚拟机非常多的情况下,有时候网络上发现某ip或mac异常,需要定位是那台虚拟机. 对虚拟机开启了的情况下,一般通过虚拟机标签菜单下搜索按钮包含ip可以搜索到对应虚拟机,通过网络界面,选择交换机对应端口组,再选择端口标签,在运行时mac地址下可以搜索对应mac. 对虚拟机关闭了的情况下,就比较难定位虚拟机了,因为此时无法获取ip,只能通过mac去判断,但mac保存在vmx文件中,此时需要ssh登陆到esxi主机,通过linux命令搜索,具体命令如下: find /vmfs/v

svn服务器地址变换以后,mac下的处理方法

svn服务器地址变换之后,mac下的处理方法 svn服务器地址变换之后,mac下的处理方法 1.进入终端,进入项目所在的文件夹下: [java] view plain copy cd 项目位置/ 2.查看svn信息 [java] view plain copy svn info 3.输出结果 [java] view plain copy Path: . Working Copy Root Path: /Users/jpm/Documents/workspaces/ios/MyProject/BS

百度网盘Mac版如何分享链接?创建百度网盘 for Mac分享链接的方法

想把自己百度网盘里的数据分享给朋友,该怎么操作呢?有很多朋友使用百度网盘,可以很轻松的自己的文件上传到网盘上,并可跨终端随时随地查看和分享.下面Mac down小编就给大家介绍一下创建百度网盘 for Mac分享链接的方法,为使用mac版百度网盘的朋友,解决百度网盘Mac版如何分享链接的烦恼. https://www.macdown.com 百度网盘Mac版如何创建分享链接 我们以分享[18126未来教育考试系统]为例,详细介绍Mac版百度网盘分享链接的方法步骤. 1.我们首先创建百度网盘for

mac 声音内录方法

mac 声音内录方法 记录下 mac 下进行声音内录的方法,可以录制微信语音等,不需要又另外用手机转录,备忘. mac 内置的 quicktime player 已带有录音.录制视频的功能,但是录音只能选择麦克风等声音输入设备作为来源,不能直接录制系统的输出声音.现在已经有开发者做出了一个方案soundflower,它包含一个内核模块,把系统的声音输出转到输入,从而使得能直接录制到本来输出的声音. 安装 soundflower brew cask install soundflower 因为 m

Mac下MySQL卸载方法

mac下mysql的DMG格式安装内有安装文件,却没有卸载文件--很郁闷的事.网上搜了一下,发现给的方法原来得手动去删.很多文章记述要删的文件不完整,后来在stackoverflow这里发现了一个遗漏的地方,所以将完整版记述在这里,以供查阅.先停止所有mysql有关进程. sudo rm /usr/local/mysql sudo rm -rf /usr/local/mysql* sudo rm -rf /Library/StartupItems/MySQLCOM sudo rm -rf /Li

mac中启动jmeter方法

1.mac中安装了jdk后,不需要去配置环境变量 2.现在jmeter包,解压缩后.打开terminal 3.在terminal中输入命令:sh jmeter.sh 打开Terminnal的方法: Terminal是一个电脑终端,我们可以通过Terminal完成许多mac的隐藏功能,Terminal在什么地方,我们应该怎么应用它呢,下面我介绍一下Terminal打开方法,和应用技巧. 1.打开Finder. 2.打开之后,在Finder左侧的工具栏中,选择应用程序. 3.应用程序中选择实用工具.

获取设备的mac地址可靠的方法

参考自:http://www.open-open.com/lib/view/open1433406847322.html /** * 获取设备的mac地址 * * @param ac * @param callback * 成功获取到mac地址之后会回调此方法 */ public static void getMacAddress(final Activity ac, final SimpleCallback callback) { final WifiManager wm = (WifiMan