首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSButtonCell NSSwitchButton不显示复选框

NSButtonCell NSSwitchButton不显示复选框
EN

Stack Overflow用户
提问于 2015-07-23 23:03:27
回答 2查看 200关注 0票数 0

下面代码中的NSButtonCell工作正常,但点击时不显示检查图标。知道为什么吗?

代码语言:javascript
复制
  - (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;  
        }  
    }

以下是操作代码:

代码语言:javascript
复制
- (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];
    }

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-06 06:37:44

我不知道为什么你的第一个解决方案不起作用-也许你没有把你的代表联系起来?注意,数据源和委托是两个独立的东西。

在您的答案中实现的方法(它是一个数据源)并不适合这样做。数据源,特别是numberOfRowsInTableView:tableView:objectValueForTableColumn:row:,应该只返回所呈现的内容,而不是创建视图/单元对象。

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

票数 1
EN

Stack Overflow用户

发布于 2015-07-24 18:40:57

我将上述代码从NSOutlineView delegate方法outlineView: dataCellForTableColumn:item:更改为delegate方法outlineView: objectValueForTableColumn: byItem:,从而解决了这个问题。

就像这样:

代码语言:javascript
复制
- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item {

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

        NSButtonCell* cell = [tableColumn dataCell];
        [cell setSelectable:YES];
        [cell setEnabled:YES];
        [cell setTransparent:NO];
        [cell setButtonType:NSSwitchButton];
        [cell setTarget:self];
        [cell setAction:@selector(checkboxChanged:)];
        [cell setTitle:@""];

        return cell;
    }

    return nil;
}

现在它工作得很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31599502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档