8

我有一个包含所有数据的 NSDictionary:

  • 一个标题(对这个问题不重要)
  • 一个链接(对这个问题不重要)
  • 一组 NSDictionary 再次包含 1 个标题和 1 个链接

我在基于视图的表视图中显示这些数据,如下所示:

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tv
{
    if (tv == _downloadTable) 
    //I use this "if" because I have another tableView that has nothing to do
    //with this one
    {
        return [[myDictionary objectForKey:@"myArray"] count];
    }
}

我想要 2 列tableView,一列显示标题,一列带有复选框,这可以让我知道检查了哪一行。

- (NSView *)tableView:(NSTableView *)tv viewForTableColumn :(NSTableColumn *)tableColumn row :(NSInteger)row 
{
    if (tv == _downloadTable) 
    {
        if (tableColumn == _downloadTableTitleColumn) 
        {
            if ([[[myDictionary         objectForKey:@"myArray"]objectAtIndex:row]objectForKey:@"title"]) 
            {
            NSString *title = [[[myDictionary objectForKey:@"myArray"]objectAtIndex:row]objectForKey:@"title"];
            NSTableCellView *result = [tv makeViewWithIdentifier:tableColumn.identifier owner:self];
            result.textField.stringValue = title;
            return result;
            }
        }
       if (tableColumn == _downloadTableCheckColumn) 
       {
           NSLog(@"CheckBox"); //I wanted to see exactly when that was called
                               //But it didn't help me :(
           NSButton *button = [[NSButton alloc]init];
           [button setButtonType:NSSwitchButton];
           [button setTitle:@""];
           return button;
       }
   }
}

现在,当我运行它并单击复选框时,它什么也不做(当然,因为我不知道如何让它做某事。我应该把应该做某事的代码放在哪里?

主要目标是一个可编辑的下载列表,现在显示列表,每行标题旁边都有复选框。我想知道哪些复选框被选中,哪些没有。

我试过这个:

[button setAction:@selector(checkBoxAction:)];

- (void)checkBoxAction: (id)sender
{
   NSLog(@"I am button : %@ and my state is %ld", sender, (long)[sender state]);
}

但我不知道如何获取该按钮的行,以了解与此复选框相关联的标题。

我也尝试了没有成功的setObjectValue方法。tableView

我希望它的工作方式是:

我有一个“开始下载”按钮,用于检查每个复选框是否被选中,并仅在选中的行中启动下一个操作(下载)。

我想避免绑定,因为我也打算让它在 iOS 上工作,而且我不想为 iOS 使用不同的代码。

4

2 回答 2

3

您可以使用该NSTableView方法-rowForView:获取特定视图所在的行。

在你的情况下,你会有这样的事情:

- (void)checkBoxAction:(id)sender
{
    NSInteger row = [_downloadTable rowForView:sender];
    NSLog(@"The button at row %ld was clicked.", row);
}

以下是文档NSTableViewhttps ://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSTableView_Class/Reference/Reference.html

于 2013-03-25T00:15:53.387 回答
1

您可以尝试使用按钮的标签属性为您放置的每个按钮设置它作为表格视图中的数字(位置)。看这里!!!

检测在 UITableView 中按下了哪个 UIButton

[编辑1]

如果人们真的决定阅读链接的帖子,您会意识到答案实际上就在那里。

尝试添加:

[button setTag:row];
[button addTarget:self action:@selector(checkBoxAction:) forControlEvents:UIControlEventTouchUpInside];

在 viewForTableColumn 例程的 else 中:

在您的 checkBoxAction 例程中:

- (void)checkBoxAction: (id)sender{
   NSLog(@"I am button : %@ and my state is %@", sender.tag, [sender state]);
}

我还认为,一旦您开始深入研究您的代码,您就会想要开始使用 TableViewCell 对象的自动出列功能。我相信你会发现自己陷入了内存分配/释放问题。

于 2012-06-27T22:27:01.190 回答