gpt4 book ai didi

cocoa - 如何在单列表格 View 中设置复选框的属性

转载 作者:行者123 更新时间:2023-12-03 17:31:36 32 4
gpt4 key购买 nike

我正在查看一个示例程序,其中可能通过使用 IB 将复选框单元格拖动到单个列中来在表格 View 中创建一系列复选框。在示例中,AppDelegate 是具有 numberOfRowsInTableView:、setObjectValue: 和 objectValueForTableColumn: 实现的数据源。

在 objectValueForTableColumn 中:在返回的数组中将复选框的状态设置为“0”或“1”。

我不清楚的是:

1) 如何设置每行复选框的属性?例如,如何设置复选框标题?在示例中,每行的每个复选框的标题为“checkbox”。我希望每行中的每个复选框都有一个唯一的标题。

2) 如何设置其他复选框按钮属性,例如启用/禁用等?

3) 复选框是如何创建的?我假设它们是在调用 numberOfRowsInTableView: 之后、当 NIB 中的对象被实例化时以某种方式创建的。如何最好地访问这些对象来执行诸如更改属性之类的操作? Apple 的 TableView 文档虽然冗长,但似乎缺乏任何可以澄清的示例。

最佳答案

这只是一个例子。

按照以下步骤完成:

  1. 拖放表格 View 。
  2. 将表单元 View (NSTableCellView) 拖放到 TableView 单元格内。现在,您的表格 View 是基于 View 的。
  3. 将表格单元格 View (NSTableCellView) 的标识符设置为“CheckBoxCell” -> 将第一列的 NSTableCellView 和另一列的表格单元格 View 设置为“TextBoxCell”。
  4. 删除 NSTableCellView 中存在的 ImageView 。
  5. 拖放一个复选框(不是 NSButtonCell,应该是 NSButton)。
  6. 拖放阵列 Controller 并放置 socket “myArrayController”
@interface ExAppDelegate : NSObject <NSApplicationDelegate,NSTableViewDelegate>

@property (assign) IBOutlet NSWindow *window;


@property (strong) NSMutableArray *myArray;

@property (strong) IBOutlet NSTableView *myTableView;

@property (strong) IBOutlet NSArrayController *myArrayController;

@end
@implementation ExAppDelegate
@synthesize myArray;
@synthesize myTableView;

- (void)applicationWillFinishLaunching:(NSNotification *)notification
{
[self.myTableView setDelegate:self];
if(self.myArray == nil)
{
self.myArray = [NSMutableArray array];
for (NSUInteger i=0; i < 10; i++)
{
NSMutableDictionary *test = [NSMutableDictionary dictionary];
[test setValue:[NSString stringWithFormat:@"%ld",i] forKey:@"Name"];
NSUInteger marks = i + 10;
[test setValue:[NSString stringWithFormat:@"%ld",marks] forKey:@"Marks"];
[self.myArray addObject:test];
}
}
[self.myArrayController rearrangeObjects];
}



- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
NSTableCellView *checkBoxCell = nil;

if(tableView == self.myTableView)
{
//Get the Column Number
NSUInteger tableCol = [tableView.tableColumns indexOfObject:tableColumn];
if(tableCol == 0)
{
checkBoxCell = (NSTableCellView *)[tableView makeViewWithIdentifier:@"CheckBoxCell" owner:tableColumn];
NSArray *myViews = [checkBoxCell subviews];
NSButton *checkBoxButton = [myViews objectAtIndex:0];

NSDictionary *valueDictionary = [self.myArray objectAtIndex:row];
NSString *titleValue = [valueDictionary valueForKey:@"Name"];
[checkBoxButton setTitle:titleValue];

NSUInteger mod = row % 2;
if(mod == 0)
{
[checkBoxButton setState:NSOnState];
}
else
{
[checkBoxButton setState:NSOffState];
}
}
else
{
checkBoxCell = (NSTableCellView *)[tableView makeViewWithIdentifier:@"TextBoxCell" owner:tableColumn];

}
}

return checkBoxCell;
}

@end

================================================

绑定(bind)(忽略数据源)myArrayController -> 绑定(bind)到 -> ExAppDelegate -> 内容数组 -> 模型键路径 -> self.myArraytableView -> 绑定(bind)到 -> 表内容 -> 内容数组 -> arrayController -> 排列对象。不要为 TableView 绑定(bind)设置任何模型键​​路径

================================================

  1. 我已将 Outlet 设置为 mytableView 到 NSTableView
  2. 假设表格 View 中有两列
  3. 假设一列应设置为复选框单元格,另一列应设置为文本字段单元格

*您想要为复选框单元格设置唯一标题以及标记为选中或未选中。(仅供引用:我交替标记为选中和未选中,例如第一行将被选中,第二行将被取消选中,依此类推...)

  1. 我正在考虑一个包含具有 2 个键的字典的数组 --> 第一个键(名称)第二个键(标记)

  2. 然后再实现方法“- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row”

    我希望这将有助于解决问题。 :)

关于cocoa - 如何在单列表格 View 中设置复选框的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17268475/

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