【问题标题】:Implement checkbox in NSTableView in mac application在 mac 应用程序中实现 NSTableView 中的复选框
【发布时间】:2012-12-25 04:31:20
【问题描述】:

首先,我搜索了3天,没有找到我要找的东西。

第二点,我对 Xcode 编程非常陌生,所以请尽可能简单和/或详细地回答您的问题!

在我的NSTableView 中,我需要第一列是文本,然后是X 复选框列数,最后一列是文本。 X 的列数是一个变量,基于我从 SQLite 文件中读取的条目数。

我的问题是:

  • 如何在运行时定义我拥有的类型和列数?
  • 我如何知道复选框值是否被选中?
  • 如果我不知道表格视图的单元格数量,如何向表格视图添加行?

感谢您花时间回答!

最好的问候, 伊戈尔

【问题讨论】:

    标签: xcode checkbox rows nstableview nstablecolumn


    【解决方案1】:

    你想在运行时创建一个表,你不知道会有多少列!!!

    这是一件大事。

    阅读NSTableView 文档,你会发现addTableColumn: 方法。在循环中继续创建 colmn 并且不要忘记将 identifier 提供给所有列。

    此外,您还希望有一个复选框。创建复选框也不难。

    编辑:

    对于复选框的实现,请在此处找到project

    在你想要的列中画一个checkBoxCell复选框。或者您可以以编程方式进行。

    我是通过 IB 做到的。

    您应该创建一个数组来存储每个(行数)复选框的状态。

    - (id)init {
        self = [super init];
        if (self) {
    
            states=[[NSMutableArray alloc] initWithObjects:@"1", @"0", @"1", nil];
        }
        return self; }
    
    
    
    - (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
        NSLog(@"Num of rows---- %ld", [names count]);
        return [names count];
    }
    

    检查 tableIdentifier 的值为“check”。

    - (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
        if ([[tableColumn identifier] isEqualTo:@"name"]) {
            return [names objectAtIndex:row];
        }
        else if ([[tableColumn identifier] isEqualTo:@"check"]) {
    
            return [states objectAtIndex:row];
        }
        else if ([[tableColumn identifier] isEqualTo:@"states"]) {
            return [states objectAtIndex:row];
        }
        return 0;
    }
    

    根据开/关更新复选框的值。

    - (void)tableView:(NSTableView *)tableView setObjectValue:(id)value forTableColumn:(NSTableColumn *)column row:(NSInteger)row {          
        [states replaceObjectAtIndex:row withObject:value];
        [tableView reloadData]; 
    }
    

    【讨论】:

    • 谢谢!例如,如何知道单元格 10-5 中复选框的状态?
    • 你有 2 个代表 - (void)tableView:(NSTableView *)tableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row - (void)tableView:(NSTableView *)tableView objectValue:(id)anObject forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row 在这里你得到列和行,检查行号广告列和标识符。您可以通过 cell=5 找到,而必须通过 [columnIdentifier isEqualToString:@"5"] 找到
    • 你好!又是我.. 我正在搜索 nstableview 文档,但没有提到复选框.. 我应该寻找什么来将某个表列设置为复选框列?谢谢!
    • 真的没有吗?没问题,我在这里,您需要以编程方式创建复选框。
    • 问一个问题,我会在那里回答,让其他人受益。
    猜你喜欢
    • 1970-01-01
    • 2010-11-15
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    • 2017-07-03
    相关资源
    最近更新 更多