从NSTableView获取cocoa中选定行的单元格值

时间:2013-04-22 09:09:27

标签: objective-c cocoa nstableview

对于通过列表绑定到数组控制器的NSTableView,我试图获取所选行的单元格的值。代码是 -

int row = [minMaxTableView selectedRow];
NSTableColumn *column = [minMaxTableView
                                         tableColumnWithIdentifier:@"min_value"];
NSCell *cell = [column dataCellForRow:row];
NSLog(@"min is --%@",[cell stringValue]);

其中minMaxTableView是我的表视图,min_value是列标识符。 但我无法得到细胞的准确值。我的要求是 - 如果我修改编辑的列值以说“-asnf”,我应该得到值'-asnf'作为min.I的输出在委托中写入此代码

-(void)controlTextDidEndEditing:(NSNotification *)obj

3 个答案:

答案 0 :(得分:2)

您可以通过此委托方法获取这些行和列。在这里,您还可以为tableview数据源设置新值。

- (void)tableView:(NSTableView *)tableView setObjectValue:(id)value forTableColumn:(NSTableColumn *)column row:(NSInteger)row {          
    [states replaceObjectAtIndex:row withObject:value];
    NSLog(@"You changed %@ for row:%ld, column with identifier:%@",value, row,[column identifier]);
    [tableView reloadData];
}

对于

上的阵列控制器
- (void)tableViewSelectionDidChange:(NSNotification *)notification;{

    NSLog(@"here %ld, %@", [[notification object] selectedRow], [self.arrayController arrangedObjects][[[notification object] selectedRow]]);
}

答案 1 :(得分:1)

没有子类化NSTableView并覆盖mouseDown,有一种简单的方法。 在willDisplayCell中获取selectedRoweditedColumn

- (void)tableView:(NSTableView *)tableView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
    if(tableView == self.tableView)
    {
        if (row == [tableView editedRow] && [[tableView tableColumns] indexOfObject:tableColumn] == [tableView editedColumn])
            {
             NSLog(@"cell string value is %@",[cell stringValue]);
            }
    }
}

答案 2 :(得分:0)

您可以继承NSTableView并覆盖mouseDown事件以获取所选行索引和列索引:

-(void)mouseDown:(NSEvent *)event
{
    NSPoint point = [self convertPoint:[event locationInWindow] fromView:nil];  //Here getting the location of the mouse clicked pont.
    long column = [self columnAtPoint:point];   //Here getting the selected column index.

    long row = [self rowAtPoint:point];     //Here getting the selected row index.
    NSTableColumn* aColumn = [[self tableColumns] objectAtIndex:column];    //Here getting the selected Table Column

    NSCell *aCell = [aColumn dataCellForRow:row];   //Here getting the exactly selected cell

    //Here setting the rspective properties to access them in a controller file.
    [self setSelectedCellRowIndex:[NSNumber numberWithLong:row]];   //Selected Row Index

    [self setSelectedCellColumnIndex:[NSNumber numberWithLong:column]]; //Selected Column Index
    [self setColumnSelected:aColumn];   //Selected Table column
    [self setCustomSelectedCell:aCell]; //Selected Cell

    [super mouseDown:event]; //Here calling the super mouseDown event
}

现在在您的控制器文件中,在表格视图的委托willDisplayCell中获取单元格值:

- (void)tableView:(NSTableView *)inTableView willDisplayCell:(id)inCell forTableColumn:(NSTableColumn *)inTableColumn  row:(NSInteger)inRow
{
 if((inRow ==[myTableView selectedRow]) && inTableColumn == [myTableView columnSelected]) {

NSLog(@"My selected cell %@",[incell stringValue]);// string value of your selected cell
}
}