首先,我對此長度表示歉意,但我想確保獲得足夠的信息。我有一個有趣的問題,應該不難。我知道,如果你想擁有NSOutlineView滾動並要顯示一個特定的行只需要使用這個模式:贊成使用代表團獲取NSOutlineView滾動到新條目
NSInteger row = [self.myOutlineView rowForItem:myItem];
[self.myOutlineView scrollRowToVisible:row];
我沒有使用NSTreeController。
我正在使用適配器模式類來充當我的數據。適配器包裝了許多不同的類型。這是一個簡單的結構:
[適配器的孩子] ----- * [適配器父]
因此適配器需要處理兒童數的護理,可以添加,可以刪除,可以擴大等並且也充當數據傳輸對象。
因此,這裏所有的一切都是問題的關鍵。當我添加一個新的項目到NSOutlineView我開始通過添加一個新的子適配器到在大綱視圖中選擇的適配器。然後我重裝用兒童的項目:
[self.myOutlineView reloadItem:selectedAdapter reloadChildren:YES];
我然後顯示該對象的視圖,並嘗試將NSOutlineView同步,以便所選擇的行涉及新顯示的視圖。因此,在一個簡單的方法步驟是:
- 最初利用NSOutlineDataSource協議
- 用戶選擇,可以添加子項
- 用戶點擊一個項目(適配器)數據加載NSOutlineView「添加」按鈕
- 新表示對象被包裹在一個適配器
- 新創建的適配器被添加到所選擇的適配器 的孩子創建
- 一個新的空表示對象
- 一個新視圖是使用新的表示對象創建並顯示
- 所選(父)節點及其子節點在NSOutlineView
- 在NSOutlineView新創建的行被滾動以查看哪個同步視圖和重新加載選擇的NSOutlineView
所以這裏是問題所在。如果使用rowForItem方法,NSOutlineView將不會找到新添加的項目。然而,我重新加載後,我可以展開父節點,並選擇新添加的項目,一切正常。在試圖解決這個問題時,我以編程方式擴展了父節點(公開新項目),然後嘗試滾動到新項目,但仍無法找到該行。 rowForItem返回-1。
添加一個新的項目,我沒有更新NSOutlineView中的東西時,我錯過了什麼嗎?我嘗試了許多不同的事情,但沒有成功,任何幫助都將不勝感激。
由於提前, 羅布