我想根據要顯示的數據動態地隱藏/顯示NSTableView中的某些列 - 基本上,如果列爲空,我希望列是隱。我目前使用控制器類作爲表的委託來填充表。動態地隱藏NSTableView中的列
任何想法?我發現我可以將該列設置爲隱藏在Interface Builder中,但是現在似乎沒有時間通過列並檢查它們是否爲空,因爲似乎沒有一種方法是在填充表格中的所有數據之前/之後調用。
我想根據要顯示的數據動態地隱藏/顯示NSTableView中的某些列 - 基本上,如果列爲空,我希望列是隱。我目前使用控制器類作爲表的委託來填充表。動態地隱藏NSTableView中的列
任何想法?我發現我可以將該列設置爲隱藏在Interface Builder中,但是現在似乎沒有時間通過列並檢查它們是否爲空,因爲似乎沒有一種方法是在填充表格中的所有數據之前/之後調用。
NSTable只是繪製表格的類。正如你自己所說的,你有一些課程將你的表格作爲委託,並且這個類爲表格提供要顯示的數據。如果將表格數據作爲NSArray存儲在委託類中,應該很容易找出一列是否爲空,不是嗎? NSArray通過委託方法詢問你的班級有多少列,所以當你被問到時,爲什麼不尋找有多少列你有數據和報告這個數字,而不是你存儲在內部的實際列數,然後當被問到爲(列,行)提供數據,只需跳過空列即可。
我目前還沒有完整的答案,但看看Bindings。通常可以用Cocoa Bindings做各種事情。
有沒有能見度的NSTableColumn約束力,但你可以設置寬度爲0
然後你可以將它綁定到空佔位符,將該值設置爲0 - 但不要忘了將其他佔位符設置爲合理的值。
(正如我所說,這只是一個開始,它可能需要一些調整)。
沒有一次所有的數據都被填充。 NSTableView不存儲數據,它從數據源動態請求數據(如果使用綁定,則綁定到對象)。它只是使用從數據源獲得的數據並將其丟棄。例如,您不應該看到表格要求輸入任何不可見的數據。
這聽起來像你正在使用數據源?當數據改變時,你有責任在表上調用-reloadData,這有點不恰當。這更像是「使一切無效」。
也就是說,您應該已經知道數據何時更改。這是您可以計算哪些列應該隱藏的點。
我已經使用綁定完成了這項工作,但通過編程方式而不是通過Interface Builder進行設置。
該僞片斷應該給你它的要點:
NSTableColumn *aColumn = [[NSTableColumn alloc] initWithIdentifier:attr];
[aColumn setWidth:DEFAULTCOLWIDTH];
[aColumn setMinWidth:MINCOLWIDTH];
[[aColumn headerCell] setStringValue:columnLabel];
[aColumn bind:@"value"
toObject:arrayController
withKeyPath:keyPath
options:nil];
[tableView addTableColumn:aColumn];
[aColumn release];
當然,你可以添加格式化和所有的東西也。
@amrox - 如果我正確理解你的建議,你說我應該將一個值綁定到我的表中NSTableColumns的隱藏屬性?這似乎可以工作,但我不認爲NSTableColumn有一個隱藏的屬性,因爲isHidden和setHidden消息控制列的可見性 - 告訴我,這不是一個屬性,除非我失去了一些東西(這很有可能)。
在Mac OS X v10.5及更高版本中,有NSTableColumn的setHidden:
selector。
這使得列動態地隱藏/與使用標識符顯示:
NSInteger colIdx;
NSTableColumn* col;
colIdx = [myTable columnWithIdentifier:@"columnIdent"];
col = [myTable.tableColumns objectAtIndex:colIdx];
[col setHidden:YES];
它不會在Interface Builder的工作。然而它以編程方式工作。這是我如何綁定一個NSTableViewColumn與標識 「狀態」 的關鍵在我的NSUserDefaults的:
斯威夫特:
tableView.tableColumnWithIdentifier("Status")?.bind("hidden", toObject: NSUserDefaults.standardUserDefaults(), withKeyPath: "TableColumnStatus", options: nil)
的Objective-C:
[[self.tableView tableColumnWithIdentifier:@"Status"] bind:@"hidden" toObject:[NSUserDefaults standardUserDefaults] withKeyPath:@"TableColumnStatus" options:nil];
,使一個很多感......我應該可能想到這一點。我想,我只需要可可的更多經驗。謝謝您的幫助。 :) – Andy 2008-09-30 21:47:34