对于通过列表绑定到数组控制器的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
答案 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
中获取selectedRow
和editedColumn
:
- (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
}
}