9

我有一个包含两列NSTableView的内容类型。View Based

我的对象结构如下:

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

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

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

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

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

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

4

3 回答 3

22

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

- (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)];
}
于 2012-10-11T22:08:06.733 回答
5

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

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];
于 2015-11-12T10:21:03.377 回答
0

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

-(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];
}
于 2012-10-11T21:46:38.920 回答