2010-08-18 30 views
1

我有一個單欄NSTableView,填充NSTableViewDataSource方法(不涉及任何綁定)。NSTableView是在NSScrollView內,當您從Interface Builder中的庫中拖入一個NSTableView時,NSTableView是默認行爲。 tableview的內容基於用戶鍵入的搜索字符串填充,並且在該點之後不會更改。NSTableView跳轉選擇...爲什麼?

我只實現數據源協議的這兩種方法:

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView; 
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row; 

輸入我的搜索字符串後,焦點仍然是在的NSTextField,但我可以自然地滾動tableview中與我的鼠標滾輪或用滾動條上的箭頭。都不會導致tableview接收對焦環。但是,如果向下滾動以使我不在tableview的頂部,然後單擊以突出顯示tableview中的單個行,則tableview會跳回到頂部,然後選擇該位置的鼠標下面的任何行。如果在點之後點擊行,它將按預期工作。

換句話說,如果NSTableView有圍繞它的聚焦環,點擊一行就會突出顯示預期的行。如果它沒有圍繞它的聚焦環,點擊一行可以在滾動到頂部之後選擇該位置的任何行。

任何見解?我運行的是雪豹,但我相信這也發生在我運行豹時。

回答

2

難道是因爲當搜索NSTextField失去焦點時,它在表格視圖上以某種方式觸發reloadData(或類似的方法),這將清空視圖(重置其滾動位置到頂部),然後重新填充它瞬間?

+0

哦......你說的沒錯!我將文本字段設置爲「發送結束編輯」而不是「僅限發送」。因此,當我點擊tableview時,它再次運行搜索。如果我在點擊tableview之前選中「搜索」按鈕,它按預期工作。 謝謝! – 2010-08-18 13:54:18

0

我曾經有一個類似的錯誤,原因是我的窗口控制器正在處理awakeFromNib,並設置列表中的滾動位置,以便它在第一次加載時位於正確的位置。但是,我最終意識到,它也正在從根據需要創建的基於nib的表視圖單元中喚醒來自消息的消息,這在滾動時有時會意外地混淆了表滾動值。我的修復是在處理第一個awakeFromNib時使窗口控制器只設置滾動位置。