首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >以编程方式向基于视图的NSTableView添加列(带有绑定)?

以编程方式向基于视图的NSTableView添加列(带有绑定)?
EN

Stack Overflow用户
提问于 2013-08-30 14:19:05
回答 1查看 4.6K关注 0票数 9

我有一个简单的应用程序,它在NSTableView中列出了一些模型。

该表是一个完全基于视图的表,有几个列,并使用绑定通过NSArrayController填充。所有这些都是在Interface中设置的,它的工作方式与预期的一样。

现在,我想以编程的方式添加更多的列,并将这些新列绑定到模型中的各种键盘。在那里,我被困住了。

为了简单起见,假设这个设置:

  1. 模型对象是普通对象,只有一个NSString属性:name
  2. AppDelegate具有一个NSArray属性(models),它包含许多模型实例。
  3. NSArrayController的content绑定到应用程序委托的models数组。
  4. NSTableView的content绑定到数组控制器的arrangedObjects
  5. 表的第一列被绑定(在IB中)以显示name属性,即列→表单元格视图→静态文本表视图单元格单元格值绑定到表单元格视图的objectValue.name

据我所知,这是一本直截了当的书,它的作用就像一种魅力。

但是.我怎么添加更多的列呢?

要以编程方式添加列(为了保持它的简单性,假设这个新列也应该显示name属性,就像已经存在的列一样),我想我应该在应用程序委托中这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
NSTableColumn* newColumn = [[NSTableColumn alloc] initWithIdentifier:@"newColumn"];

// do binding magic somehow
// [[newColumn dataCell] bind:NSValueBinding toObject:??? withKeyPath:??? options:nil];

[self.table addColumn:newColumn]; // the table's connected with an IBOutlet

我尝试了许多从/到数据单元格、表、列、数组控制器、数组本身以及所有类型的键盘的绑定组合,但都没有效果。新列添加得很好,但从未填充过。

我设想我创建的基本NSTableColumn实例是基于单元格的,而不是基于视图的,这会带来麻烦。但是,我不知道如何从这里开始,而且文档从不讨论以编程方式添加的绑定列。

在这种情况下,我所需要的只是一个简单的文本列,绑定到模型,就像我可以轻松设置IB的那个。

我可以通过实现一个NSTableViewDataSource并“手动”输入表来完成这一切,但是我已经用绑定设置了所有其他东西。

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2013-12-02 05:32:26

您需要使用以下委托方法绑定到列的NSTableCellView的子视图:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
    // Get cell view - NSTableCellView
    // This can be a prototype loaded from the table view or from another nib
    // see : - registerNib:forIdentifier:
    NSView *cellView = [tableView makeViewWithIdentifier:@"Cell1" owner:[tableView delegate]];

    // - subViewWithIdentifier is a simple category method that searches -subviews
    NSView *subView = [cellView subViewWithIdentifier:@"TextField1"];
    [subView bind: NSValueBinding toObject:cellView withKeyPath: @"objectValue.name" options: nil];

    subView = [cellView subViewWithIdentifier:@"TextField2"];
    [subView bind: NSValueBinding toObject:cellView withKeyPath: @"objectValue.address" options: nil];

    return cellView;
}

NSView分类方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- (NSView *)subViewWithIdentifier:(NSString *)theIdentifier
{
    __block NSView *subView = nil;
    [[self subviews] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
#pragma unused(idx)
        if ([[obj identifier] isEqualToString:theIdentifier]) {
            subView = obj;
            *stop = YES;
        }
    }];
    return subView;
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18542259

复制
相关文章
GridView添加新列并绑定控件
4、创建控件事件(不能是click事件,关联字段触发的事件要创建Command事件)
用针戳左手中指指头
2021/01/29
1.2K0
GridView添加新列并绑定控件
macOS开发之NSTableView的应用详解
    和iOS开发中的UITableView有很大差别,NSTableView并非是一个可滚动的列表视图,其是一个不可滚动、支持多列多行的原始列表视图。若要使NSTableView支持滚动,通常会将其嵌套入NSScrollView控件中。与UITableView类似,NSTableView的数据也是用过DataSource代理来提供,通过Delegate代理来进行表格视图的定制化。在OS X v10.6版本之前,NSTableView中行数据载体视图必须是NSCell的子类,之后版本的OS X支持开发者创建基于View的TableView视图,同样也支持基于Cell的TabelView视图,在开发者,我们可以根据实际需求选择。
珲少
2018/08/15
4.8K0
macOS开发之NSTableView的应用详解
ViewBinding 视图绑定
ViewBinding 是和 Android Studio 3.6 一起发布的,Gradle 要求 3.6.0+,ViewBinding 可以轻松编写可与视图交互的代码,在模块中启用 ViewBinding 后,系统会该模块中的每个 XML 布局文件生成一个绑定类。绑定类中会为所有具有 ID 视图生成对应的引用。
100001509164
2023/01/16
5080
Bootstrap 轮播(Carousel)插件向站点添加滑块的方式
如果您想要单独引用该插件的功能,那么您需要引用 carousel.js。或者,正如 Bootstrap 插件概览 一章中所提到,您可以引用 bootstrap.js 或压缩版的 bootstrap.min.js。
好派笔记
2021/09/18
2.8K0
【JetPack】为现有 Android 项目配置视图绑定 ( ViewBinding ) 模块 ( 视图绑定不影响传统布局操作 | 视图绑定类关联 Activity | 视图绑定类本质 )
1 . 视图绑定模块默认为全部布局生成绑定类 ; 视图绑定 ( ViewBinding ) 模块一旦启用 , 应用的全部布局都会默认自动生成一个视图绑定类 , 如果生成了视图绑定模块 , 是否对于已经使用的 findViewById 或者 @BindView @BindViews 代码是否有影响 ;
韩曙亮
2023/03/27
8060
【JetPack】为现有 Android 项目配置视图绑定 ( ViewBinding ) 模块 ( 视图绑定不影响传统布局操作 | 视图绑定类关联 Activity | 视图绑定类本质 )
diango之基于内置视图CBS编程
Class-based views是Django为解决建站过程中的常见的呈现模式而建立的。具有如下几个原则:
菲宇
2019/06/13
7150
Android视图绑定ViewBinding的使用
首先感谢这位读者的提议,让我抽出时间细看视图绑定的内容,也打算在项目中使用该功能。当然,还有其他读者提议的内容我已记录,后期有时间也会陆续更新。话不多说,我们开始学习吧!
SoullessCoder
2021/09/07
2.6K0
Android 视图绑定 ViewBinding
我们以前获取xml中的View,通常通过findViewById但是样板代码太多,而且容易引用错误发生崩溃。
zinyan.com
2022/12/07
1.6K0
Django 中针对基于类的视图添加 csrf_exempt
在Django中对于基于函数的视图我们可以 @csrf_exempt 注解来标识一个视图可以被跨域访问。那么对于基于类的视图,我们应该怎么办呢? 简单来说可以有两种访问来解决 方法一:在类的 dispatch 方法上使用 @csrf_exempt from django.views.decorators.csrf import csrf_exempt class MyView(View): def get(self, request): return HttpResponse("
kongxx
2018/05/14
1.6K0
Android视图绑定ViewBinding的使用
首先感谢这位读者的提议,让我抽出时间细看视图绑定的内容,也打算在项目中使用该功能。当然,还有其他读者提议的内容我已记录,后期有时间也会陆续更新。话不多说,我们开始学习吧!
SoullessCoder
2020/03/20
2.7K0
Android视图绑定ViewBinding的使用
Mac OSX 开发基础控件学习之 NSOutlineView
在开发基于osx的Application的过程中,当我们需要显示一组列表结构的数据时,比较容易想到的控件是NSTableView;但如果你显示的数据有层级结构时,NSTableView就会面临一个问题:因为在osx中,NSTableView没有分组功能( sections) 因为在cocoa 中提供了另一个控件供满足我们的需求NSOutlineView它是继承自NSTableView的子类,是Mac OSX Application常用的控件之一,与NSTableView相似,NSOutlineView也使用行和列来显示内容,但所不同的是NSOutlineView使用具有层级的数据结构 下面我们通过一个示例(你也可以从这里Demo下载工程,但更推荐自己一步一步创建工程并实现功能)来简单学习一下怎样使用NSOutlineView显示带有层级结构的数据内容
代码行者
2018/08/23
1.6K0
Mac OSX 开发基础控件学习之 NSOutlineView
一步一步,开始上手Mac 开发(一)
通过本文,你可以创建你的第一个Mac Application,编译并指定版本号,而且经过练习,你应该掌握:
代码行者
2018/08/23
4.1K1
一步一步,开始上手Mac 开发(一)
以编程方式执行Spark SQL查询的两种实现方式
摘 要 在自定义的程序中编写Spark SQL查询程序 1.通过反射推断Schema package com.itunic.sql import org.apache.spark.sql.SQLContext import org.apache.spark.{SparkConf, SparkContext} /**   * Created by itunic.com on 2017/1/2.   * Spark SQL   * 通过反射推断Schema   * by me:   * 我本沉默是关注互联
天策
2018/06/22
2K0
QTableView表格视图的列宽设置
      Qt中的表格控件可以通过从QTableView或QTableWidget派生子类实现。其中,QTableWidget只是对QTableView的一种简单封装。因为使用QTableView常常需要用户指定自定义的Model,这意味使用起来不够轻便。有时候我们只是想利用一些简单的表格功能,不需要对表格展示有多强大的控制。那么,QTableWidget便是一个不错的选择。这篇博文主要记录表格的列宽和行高的设置。 方法一:       恰当的设置表格的列宽往往能给表格的美观性带来较好的效果。一种简单的方
24K纯开源
2018/01/18
8.2K0
QTableView表格视图的列宽设置
使用视图绑定替代 findViewById
从 Android Studio 3.6 开始,视图绑定能够通过生成绑定对象来替代 findViewById,从而可以帮您简化代码、移除 bug,并且从 findViewById 的模版代码中解脱出来。
Android 开发者
2020/03/13
1.6K0
【JetPack】ViewBinding 视图绑定组件 ( 启用模块 | 视图绑定定制 | 绑定类名称生成规则 | 绑定类字段生成规则 | 绑定类获取根视图 | 绑定类获取布局组件 )
Activity 获取布局组件方式 : 在之前的 Activity 代码中 , 使用 findViewById ( ) 方法 , 或者 Butter Knife 的 @BindView 注解方式获取 Layout 布局中的组件对象 ;
韩曙亮
2023/03/27
1.2K0
【JetPack】ViewBinding 视图绑定组件 ( 启用模块 | 视图绑定定制 | 绑定类名称生成规则 | 绑定类字段生成规则 | 绑定类获取根视图 | 绑定类获取布局组件 )
以编程方式创建Vue.js组件实例
最近参与了一个Vue.js项目,项目中需要能够以编程方式创建组件。通过编程,意思是使用JavaScript创建和插入组件,而无需在模板中编写任何内容。
前端知否
2020/03/23
7.9K3
Spring 中的 @Import 注解及向容器中添加 Bean 的几种方式
这次介绍一下 Spring 中的一个重要的注解 @Import 以及向容器中添加 Bean 的几种方式 ,该注解在 SpringBoot 自动转配中起到重要的作用。
wsuo
2020/07/30
1.7K0
PBI-基础入门:添加列与新建列(计算列)
大海:在Power BI里增加列有2种方法,一种是咱们在学Power Query里的“添加列”方法,还有一种是在PowerPivot里的新建“计算列”方法。具体操作方法如下:
大海Power
2021/08/30
7.6K0
点击加载更多

相似问题

以编程方式向NSTableView添加列

11

以编程方式向NSView添加NSTableView

23

以编程方式绑定NSTableView

20

使用Swift中的绑定以编程方式创建基于视图的NSTableView

12

Swift NSTableView以编程方式添加列->列标题

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文