基于视图的NSTableView + NSButton

3
我有一个基于视图的 NSTableView,使用 Cocoa Bindings 更改单元格中某些标签和图像的值。它非常好用。然而,我想在单元格中添加一个按钮。我已经让按钮起作用了,但是它的操作方法只有按钮作为发送者,这意味着我不知道按钮所在单元格的内容。我需要在按钮上存储一些额外的数据 - 至少是按钮所在行的索引。我子类化了 NSButton 并在单元格中使用了我的子类,但是 Interface Builder 不知道额外的属性,因此我无法绑定到它。如果我想在代码中绑定它,我不知道传递给它的对象或关键路径的名称。
如何让它工作?
2个回答

7

你可以在你的操作方法中使用rowForView来获取行的值。

- (IBAction)doSomething:(id)sender
{
        NSInteger row = [_myTableView rowForView:sender];
}

0

您可以使用Interface Builder中的Identity字段,将nib文件中的表格单元视图与代码中的实例关联起来:

enter image description here

另外,在你的表视图代理中,您还需要实现 - tableView:viewForTableColumn:row: 方法。(别忘了在IB中连接代理)
 - (NSView*)tableView:(NSTableView*)tableView viewForTableColumn:  
(NSTableColumn*)tableColumn row:(NSInteger)row
    {
        SSWButtonTableCellView *result = [tableView makeViewWithIdentifier:@"ButtonView" owner:self];
        result.button.title = [self.names objectAtIndex:row][@"name"];
        result.representedObject = [self.names objectAtIndex:row];
        return result;
    }

我在我的NSTableCellView子类中添加了representedObject属性,并在上面的表视图委托方法中进行了设置。
您的自定义表格单元视图稍后可以在其操作中使用该对象。例如:
- (IBAction)doSomething:(id)sender
{
    NSLog(@"Represented Object:%@", self.representedObject);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接