gpt4 book ai didi

objective-c - 带复选框单元格的 NSTableView

转载 作者:太空狗 更新时间:2023-10-30 03:42:27 25 4
gpt4 key购买 nike

在 Xcode 4 上将 NSTableView 添加到我的 xib 后,我将其设置为有 4 列。第一列是一个简单的列,将包含一个项目的名称。其他 3 个是复选框。我从对象库中拖了一个 Check Box Cell 到 tableview。

我填充表格并创建并显示复选框,但是如果我单击没有任何反应,我无法选中或取消选中它们。此外,我什至不知道如何通过代码来完成。

我怎样才能做到这一点:能够选中或取消选中复选框并从代码中获取它们的状态。

我已经看到了 this question它并没有真正回答我的问题。

根据要求,这里是一些处理表格的代码:

- (int)numberOfRowsInTableView:(NSTableView *)tableView
{
return (int)[myArray count];
}

- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row
{
if([[tableColumn identifier] isEqualToString:@"col1"])
{
return[NSNumber numberWithInt:NSOffState];
}

return [myArray objectAtIndex:row];
}

- (void)tableView:(NSTableView *)tableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
NSLog(@"%d", [anObject boolValue]);
if([[tableColumn identifier] isEqualToString:@"col1"])
{
NSLog(@"click col1");
}
if([[tableColumn identifier] isEqualToString:@"col2"])
{
NSLog(@"click col2");
}

}

我刚刚添加了更多代码。如何设置勾选/取消勾选?

最佳答案

模型

您需要决定一个模型,即您将如何表示在 TableView 上显示的数据。例如:

// SomeObject.h
#import <Foundation/Foundation.h>
@interface SomeObject
@property (copy) NSString *name;
@property (assign,getter=isVisible) BOOL visible;
@property (assign,getter=isOpaque) BOOL opaque;
@property (assign,getter=isAnimatable) BOOL animatable;
@end

// SomeObject.m
#import "SomeObject.h"
@implementation SomeObject
@synthesize name, visible, opaque, animatable;
- (void)dealloc {
[name release];
[super dealloc];
}
@end

nib文件

为了这个答案,给出与 SomeObject 中的属性名称相匹配的表列标识符。

从模型向 TableView 提供值

- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row
{
// Retrieve the model object corresponding to `row'
SomeObject *obj = [myArray objectAtIndex:row];

// Return the object property corresponding to the column
if([[tableColumn identifier] isEqualToString:@"name"])
{
return obj.name;
}
// Since this method has return type `id', we need to box the
// boolean values inside an `NSNumber' instance
else if([[tableColumn identifier] isEqualToString:@"visible"])
{
return [NSNumber numberWithBool:obj.visible];
}
else if([[tableColumn identifier] isEqualToString:@"opaque"])
{
return [NSNumber numberWithBool:obj.opaque];
}
else if([[tableColumn identifier] isEqualToString:@"animatable"])
{
return [NSNumber numberWithBool:obj.animatable];
}

return nil;
}

使用 TableView 中的值更新模型

- (void)tableView:(NSTableView *)tableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
// Retrieve the model object corresponding to `row'
SomeObject *obj = [myArray objectAtIndex:row];

// Set the object property corresponding to the column
if([[tableColumn identifier] isEqualToString:@"name"])
{
obj.name = anObject;
}
// Since the new value (`anObject') is an object, we need to
// convert it to `BOOL' by sending it `-boolValue'
else if([[tableColumn identifier] isEqualToString:@"visible"])
{
obj.visible = [anObject boolValue];
}
else if([[tableColumn identifier] isEqualToString:@"opaque"])
{
obj.opaque = [anObject boolValue];
}
else if([[tableColumn identifier] isEqualToString:@"animatable"])
{
obj.animatable = [anObject boolValue];
}
}

可以通过使用键值编码来简化此代码,但在您掌握 TableView 数据源之后,这将作为练习保留下来。 :P

关于objective-c - 带复选框单元格的 NSTableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7433495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com