【问题标题】:How to get elements inside a selected row in a NSTableView?如何获取 NSTableView 中选定行内的元素?
【发布时间】:2012-10-11 18:52:12
【问题描述】:

我有一个内容类型为View BasedNSTableView,有两列。

我的对象结构如下:

Table View
    Table Column
        Table Cell View
            Text Field
    Table Column
        Table Cell View
            Popup Button

对于选定的行,我想获取选定行内特定列的元素。具体来说,我想在所选行的第一列中获取Text Field

我有一个表格视图的出口,到目前为止我有所选行的索引,但仅此而已:

- (void)getSelectedTextField
{
    NSInteger selected = [tableView selectedRow];
}

关于如何解决这个问题的任何想法?

编辑:这就是我想要做的:我想将文本字段更改为处于编辑状态并专注于它,以便用户可以尽快开始编辑文本字段值被选中

【问题讨论】:

  • 您需要访问这些元素的目的是什么?如果您只需要获取数据,则应将其存储在 NSTableViewDataSource 中,然后将该数据源提供给 NSTableView。
  • @NathanVillaescusa:就是修改其中一个控件。具体来说,我想将文本字段更改为处于编辑状态并专注于它,以便用户可以在选择文本字段值后立即开始编辑。

标签: objective-c cocoa nstableview nstextfield


【解决方案1】:

我似乎已经解决了我自己的问题:

- (void)getSelectedTextField
{
    NSInteger selected = [tableView selectedRow];

    // Get row at specified index
    NSTableCellView *selectedRow = [tableView viewAtColumn:0 row:selected makeIfNecessary:YES];

    // Get row's text field
    NSTextField *selectedRowTextField = [selectedRow textField];

    // Focus on text field to make it auto-editable
    [[self window] makeFirstResponder:selectedRowTextField];

    // Set the keyboard carat to the beginning of the text field
    [[selectedRowTextField currentEditor] setSelectedRange:NSMakeRange(0, 0)];
}

【讨论】:

  • 先生,您能帮我获得一个组合框的选定项目,我将其添加到文本字段的一个列中。任何帮助都很棒
【解决方案2】:

使用可以通过获取其子视图来获取表格视图单元格的所有元素。建议使用前先显示日志列表子视图

NSInteger index = [self.tableViewFiles selectedRow];

// Get row at specified index of column 0 ( We just have 1 column)
NSTableCellView *cellView = [self.tableViewFiles viewAtColumn:0 row:index makeIfNecessary:YES];

// Get row's checkBox ( at index 0, textFields is 1,2)
NSButton *checkBox = [[cellView subviews] objectAtIndex:0];

【讨论】:

    【解决方案3】:

    如果文本字段是表格视图单元格的唯一子视图,您可以使用以下代码获取对它的引用,并选择其文本,以便对其进行编辑:

    -(void)tableViewSelectionDidChange:(NSNotification *)notification {
       NSInteger row = [notification.object selectedRow];
       NSTextField *tf = [[[notification.object viewAtColumn:0 row:row makeIfNecessary:NO]subviews] lastObject];
       [tf selectText:tf.stringValue];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-21
      • 1970-01-01
      • 2012-01-01
      • 2018-11-16
      • 1970-01-01
      • 1970-01-01
      • 2010-11-06
      • 2018-12-04
      相关资源
      最近更新 更多