2014-05-01 70 views
1

好的。我瀏覽了一些建議(在問我之前經常回答我的問題)。我沒有找到我需要的東西。NSTableView:顯示一個擴展行(動態調整大小)

我知道我做錯了什麼。我一直在iOS(UIKit)中執行此操作,但NS(Mac)中的表格與UIKit完全不同。

我有一個基於視圖的NSTableView。每行有1列。此列有一個標題(高21點)和擴大視圖(該行高420點)。標題左側有一個顯示三角形,用於切換這兩種模式。

控制器也是表數據源和委託。我有行高調用,爲視圖返回正確的值。

標題顯示正常。我將行高設置爲21,只顯示標題。這剪輯了主視圖。

A row of closed headers

當一個三角形被觸發,行擴大其高度以露出整個視圖:

An open row

足夠簡單,是嗎?

問題是B不顯示。我只是得到一個空白(但是,A被正確顯示)。項目在那裏,只是沒有被顯示。表格行是正確的高度(這可以通過使用交替行顏色來驗證)。

我試過在視圖上設置setNeedsLayout/Draw。

我可能做錯了什麼線索?

我敢打賭,我正在做一件頭腦發熱的事情,我會繼續研究這件事。

回答

1

使用noteHeighOfRowsWithIndexesChanged:?這是一個NSTableView函數,而不是委託函數。

在爲委託功能tableView:heightOfRow它聲明的文檔:

雖然表視圖可以緩存返回的值,你應該確保這種方法是有效的。當您更改行的高度時,您必須通過調用noteHeightOfRowsWithIndexesChanged:來使現有行高度無效。當reloadData和noteNumberOfRowsChanged被調用時,NSTableView會自動使其整個行高度緩存失效。

就像它提到的那樣,NSTableView的reloadData通常是解決您的問題的懶惰方式。

你的表控制器不應該需要你試過的setsNeeds [whatever]方法。

此外,在披露三角形等方面,OSX上有一個名爲NSOutlineView的NSTableView子類,用於處理項目擴展,如果您將數據轉換爲記錄不良的樹格式。如果你的數據不是一棵天然的樹,我實際上不會推薦它,但你應該意識到它,即使它的API很糟糕。哦,點擊顯示三角形時的展開動畫。

+0

謝謝!我會檢查一下。我 - 修復它。原始視圖被分成2個子視圖(標題和正文)。我從這些子視圖中刪除了這些項目,並將它們全部放在主視圖中。他們現在顯示。很奇怪。 –

+0

哦,有趣。我相信桌面視圖或任何顯示單元格的子幀,如果顯示被裁剪 - 在cellView中使用drawRect時,我有一些醜陋的滾動問題 - 所以我猜needsDisplay可能是有用的,但我不知道。當您將行高標記爲髒時,TableView應處理該事件。 – stevesliva

+0

謝謝!我會一直搞亂它,看看它發生了什麼。 –