2012-06-03 103 views
0

我正在嘗試調整基於視圖的NSTableView中的所有NSTextField。我想在所有文本字段上調用[myTextfield sizeToFit]。我的問題是如何迭代我的tableview中的所有視圖。我試過enumerateAvailableRowViewsUsingBlock:但它不起作用。我能做些什麼來解決這個問題?遍歷NSTableView中的視圖

回答

0

您可以通過int numberOfRows = [yourTableView numberOfRows]獲得總行數。然後使用它遍歷它們並調用你的方法。 (假設你在IB中給你的NSTextField一個獨特的標籤以區別於你的NSTableCellView的其他子視圖)。

for (int i = 0; i < numberOfRows; i++) { 
     NSTableCellView *someTableCellView = [[yourTableView viewAtColumn:(NSInteger) row:i makeIfNecessary:FALSE]; 
     NSTextField *yourTextField = [someTableCellView viewWithTag:(NSInteger)]; 
    } 

另一個地方做它在NSTalbeView委託方法tableView:viewForTableColumn:row:被調用每次你對你的tableView致電reloadData

+0

謝謝@bijan,但這種解決方案並不適合我。當我通過NSLog()打印視圖時,它指向null。 – dnlkng

+0

哪一個引用null,NSTableCellView或NSTextField? – bijan

+0

NSTableCellView(我的子類)。 – dnlkng

3

試試這個。在IB中,將文本字段的標記設置爲任何你想要的(在這個例子中我使用1)。您可以通過致電viewAtColumn:row:makeIfNecessary:訪問各行的NSTableCellView。確保makeIfNecessary:設置爲YES

代碼:

int x; 
for (x = 0; x < [tableView numberOfRows]; x++) { 
    NSTableCellView *cellView = [tableView viewAtColumn:0 row:x makeIfNecessary:YES]; 
    NSTextField *tField = [cellView viewWithTag:1]; 
    [tField sizeToFit]; 
} 

這爲我工作,所以如果它不爲你,我會感到很驚訝。如果有人可以提供一些見解,爲什麼makeIfNecessary:必須是YES來訪問應該已經創建的行視圖,我將不勝感激。

+0

同上你的問題makeIfNecessary:,sud0。測試我的應用程序,如果將其設置爲NO,則該方法在10次測試運行中的5次中返回nil。但是,如果將其設置爲YES,則 –

+0

將繼續,如果將其設置爲YES,則會在25/25次測試中返回預期的視圖。 –