我试图在NSTableView
的末尾插入新行,滚动到该行并开始对其进行编辑。除了滚动以外,其他所有功能似乎都正常运行。表格视图似乎滚动到最后一行之前的行(这是我刚刚添加的行)。
这是我使用的代码:
- (void)insertNewRowInMainTable
{
[self logScrollView];
NSUInteger lastRow = self.mainTableView.numberOfRows;
[self.mainTableView insertRowsAtIndexes:[NSIndexSet indexSetWithIndex:lastRow] withAnimation:NSTableViewAnimationEffectFade];
[self.mainTableView editColumn:0 row:lastRow withEvent:nil select:YES];
NSLog(@"Inserted Row");
NSLog(@"last row rect: %@",NSStringFromRect([self.mainTableView rectOfRow:lastRow]));
[self logScrollView];
}
- (void)tableViewSelectionDidChange:(NSNotification *)aNotification
{
NSInteger selectedRow = [self.mainTableView selectedRow];
[self.mainTableView scrollRowToVisible:selectedRow];
}
- (void)logScrollView
{
NSScrollView *scrollView = [self.mainTableView enclosingScrollView];
NSLog(@"Document visible rect: %@",NSStringFromRect([scrollView documentVisibleRect]));
NSLog(@"Table view frame: %@",NSStringFromRect([self.mainTableView frame]));
NSInteger selectedRow = [self.mainTableView selectedRow];
NSLog(@"Selected row rect: %@",NSStringFromRect([self.mainTableView rectOfRow:selectedRow]));
}
这是日志的输出:
2013-05-01 16:22:04.254 DEGS[96570:303] Document visible rect: {{0, 0}, {509, 506}}
2013-05-01 16:22:04.255 DEGS[96570:303] Table view frame: {{0, -204}, {509, 1732}}
2013-05-01 16:22:04.256 DEGS[96570:303] Selected row rect: {{0, 0}, {509, 209}}
2013-05-01 16:22:04.287 DEGS[96570:303] Inserted Row
2013-05-01 16:22:04.287 DEGS[96570:303] last row rect: {{0, 1732}, {509, 161}}
2013-05-01 16:22:04.288 DEGS[96570:303] Document visible rect: {{0, 1226}, {509, 506}}
2013-05-01 16:22:04.288 DEGS[96570:303] Table view frame: {{0, -204}, {509, 1732}}
2013-05-01 16:22:04.288 DEGS[96570:303] Selected row rect: {{0, 1732}, {509, 161}}
从日志中可以看到,插入新行不会更改表视图框架的大小。因此,当我滚动到最后一行时,滚动视图将滚动到contentView的底部,但尺寸错误,仅显示倒数第二行。
插入行后,我可以通过手动移动滚动视图来解决此问题,但我想了解它是错误还是功能?
最佳答案
插入新行不会滚动表格视图。这是给定的功能。
您需要向下滚动才能看到最后添加的行。
此方法为您做到了:
- (void)scrollRowToVisible:(NSInteger)row;