2013-05-01 14 views
1

我試圖在NSTableView的末尾插入新行,滾動到該行並開始編輯它。除了滾動之外,一切看起來都很好。表視圖似乎滾動到最後一行(這是我剛剛添加的行)之前的行。將行添加到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的底部,但大小錯誤只顯示最後一行。

我可以通過在插入行後手動移動滾動視圖來解決這個問題,但我想了解它是一個錯誤還是一個功能?

回答

1

插入新行不會滾動表視圖。這是給定的功能。

您需要向下滾動以查看最後添加的行。

這種方法會替你:

- (void)scrollRowToVisible:(NSInteger)row; 
+0

是的,但在我的代碼中,我選擇YES調用表視圖的'-editColumn:row:withEvent:select:'方法。然後調用執行滾動到所選單元格的'-tableViewSelectionDidChange:'委託方法。正如我所說的,當我插入一個新的單元格時滾動發生,但它滾動到錯誤的位置。它滾動到倒數第二個單元而不是最後一個。 – Jacopo 2013-05-01 06:50:11

+0

selDidChange不滾動到最後一行。 – 2013-05-01 06:51:04

+0

是的,但如果你看看我的代碼上面,你會看到我調用'-scrollRowToVisible:'在selDidChange – Jacopo 2013-05-01 06:53:05

0

有同樣的問題,新添加的行不會被滾動到,或者從頂部只有一個像素或兩個會根據表中的滾動位置顯示。我實施了manual scrolling,現在效果非常好。

相關問題