objective-c - NSButtonCell NSSwitchButton 不显示复选框

标签 objective-c cocoa

下面代码中的 NSButtonCell 工作正常,但单击时不会显示复选图标。有什么想法吗?

  - (NSCell *)outlineView:(NSOutlineView *)outlineView dataCellForTableColumn:(NSTableColumn *)tableColumn item:(id)item {

        if ([[tableColumn identifier] isEqualToString:@"select"]) {

            NSButtonCell *cell = [[NSButtonCell alloc]init];
            [cell setButtonType:NSSwitchButton];
            [cell setTarget:self];
            [cell setAction:@selector(checkboxChanged:)];
            [cell setTitle:@""];

            return cell;

        } else {
            NSCell *cell = [tableColumn dataCell];
            return cell;  
        }  
    }

这里是操作代码:

- (IBAction)checkboxChanged:(id)sender {

    NSButtonCell *aCell = [[sender tableColumnWithIdentifier:@"select"]
                      dataCellForRow:[sender selectedRow]];


    if ([aCell state] == NSOnState) {

        NSLog(@"ON");
        [aCell setState:NSOffState];


    } else {

         NSLog(@"OFF");
        [aCell setState:NSOnState];
    }

}

最佳答案

我不确定为什么您的第一个解决方案不起作用 - 也许您没有连接您的代表?请注意,数据源和委托(delegate)是两个独立的事物。

您在答案中实现的方法(即数据源)不是执行此操作的正确位置。数据源,特别是 numberOfRowsInTableView:tableView:objectValueForTableColumn:row:,应该返回所呈现的内容,而不是创建 View /单元格对象。

我建议您在 xib 中创建并配置 NSButtonCell(如果您有 NSButtonCell),或者在创建表格 View 及其列的同一位置创建和配置 NSButtonCell,这也是设置每列单元格的正确位置。

关于objective-c - NSButtonCell NSSwitchButton 不显示复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31599502/

相关文章:

ios - 将 JSON 输出存储在 NSArray 中

objective-c - 反序列化JSON后如何区分 bool 值和整数?

objective-c - NSScrollView 滚动到底部

macos - 将授权服务与 NSTask 结合使用

ios - 我可以像在 Android 中一样通过 ID 获取 View 的实例吗?

ios - 关于访问文本字段时从其他线程获取锁的警告

objective-c - 如何在进入前景时保留 UIScrollView 的框架?

cocoa - 无法从 appdelegate.m 为 NSProgressIndicator 制作动画

objective-c - HTTP 直播 Mac 应用程序

MacOS - 获取管理员密码的合法方法