什麼是使用多列設置我的NSTableView以僅在一列中顯示某些數據的簡單方法。我有IBOutlets設置,但我不知道從哪裏去。帶有多列的NSTableView
回答
假設您沒有使用可可綁定/核心數據,您可以通過實施NSTableViewDataSource協議中的兩種方法在NSTableView中顯示數據。通常,控制器將執行協議,因此打開控制器.m文件和這些方法添加到控制器的@implementation
:
- (NSInteger)numberOfRowsInTableView:(NSTableView*)tableView {
return 25; // fill this out
}
– (id) tableView:(NSTableView*)tableView
objectValueForTableColumn:(NSTableColumn*)column
row:(int)row {
return row % 3 ? @"Tick..." : @"BOOM!"; // fill this out
}
您需要將表的dataSource
屬性設置爲控制器。在Interface Builder控制中 - 從表視圖拖動到控制器並設置dataSource
。現在構建並運行,您應該可以在表格中看到您的數據。
如果您只想填寫一列,請將IBOutlet NSTableColumn *添加到您的控制器;我們稱之爲explosiveColumn
。在界面生成器中,從控制器拖動到要填寫的列並設置explosiveColumn
。然後,在的tableView:objectValueForTableColumn:行:你可以測試column
參數是相同的對象一個出口設置爲:
– (id) tableView:(NSTableView*)tableView
objectValueForTableColumn:(NSTableColumn*)column
row:(int)row {
if (column == explosiveColumn) {
return row % 3 ? @"Tick..." : @"BOOM!";
} else {
// other columns blank for now
return nil;
}
}
本教程可能是有用的:http://www.cocoadev.com/index.pl?NSTableViewTutorial
這裏是一個例如,使用與數據源的方法和基於文檔的應用程序的多個表的觀點:
#pragma mark - Data Source Methods
- (NSInteger) numberOfRowsInTableView:(NSTableView *)tv
{
if (tv == racerTableView)
return [racerList count];
else if (tv == vehicleTableView)
return [vehicleList count];
else
return 0; // something wrong here...
}
- (id)tableView:(NSTableView *)tv objectValueForTableColumn:(NSTableColumn *)col
row:(NSInteger)rowi
{
NSString *colid = [col identifier];
if (tv == racerTableView){
NHRacers *racer = [racerList objectAtIndex:rowi];
return [racer valueForKey:colid];
}
else if (tv == vehicleTableView){
NHVehicles *vehicle = [vehicleList objectAtIndex:rowi];
return [vehicle valueForKey:colid];
}
else
return 0; // something wrong here...
}
- (void)tableView:(NSTableView *)tv setObjectValue:(id)obj forTableColumn:(NSTableColumn *)col row:(NSInteger)rowi
{
NSString *colid = [col identifier];
if (tv == racerTableView) {
NHRacers *racer = [racerList objectAtIndex:rowi];
[racer setValue:obj forKey:colid];
}
else if (tv == vehicleTableView){
NHVehicles *vehicle = [vehicleList objectAtIndex:rowi];
[vehicle setValue:obj forKey:colid];
}
else
nil; // something wrong here...
[self updateChangeCount:NSChangeDone];
}
數據源出口被設置爲文件的所有者以及文件的所有者已成立vehicleTableView和racerTableView到t的tableview中繼承人在IB中各自的「表格視圖」。 colid鍵檢查標識符(在IB中通過選擇「Identity」下拉列表下方的表視圖列來設置標識符,而顯示「Identity Inspector」)。這些值被選擇爲表視圖中顯示的類的KVC(關鍵編碼兼容)屬性:使用小寫的第一個字母(請參閱apple docs for rest)。
例如: (在NHVehicles.h)
@interface NHVehicles : NSObject
{
NSUInteger entry;
NSString *name;
NSString *vehicleClass;
}
@property NSUInteger entry;
@property NSString *name, *vehicleClass;
@end
(在NHVehicles.m)
@implementation NHVehicles
@synthesize entry, name, vehicleClass;
@end
此的tableView, 「項」, 「名」 和 「vehicleClass」 會(w/o「)輸入到它們各自列的標識符字段中
如果您不想在類中顯示某些數據,則不要輸入列標識符的關鍵字。 aution:我使用的是Xcode 4.5.1,我注意到一旦我爲特定的列標識符輸入了幾個鍵,然後改變了主意並嘗試清除文本,它就會在我從標識符字段中刪除文本時抱怨我不能再把這個字段留給我編輯過的列)。這並不難解決,但這是一個驚喜。
- 1. 帶多個表的NSTableView代表
- 2. 帶圖像的NSTableView
- 3. 帶圓角的NSTableView
- 4. 帶NSTableView的箭頭鍵
- 5. 帶自定義NSColumnHeaderCell的NSTableView
- 6. 帶有多列的ORMLITE ORDER_BY
- 7. 帶有多列的iPhone + UITableView
- 8. NSTableView的多重選擇
- 9. NSTableView沒有NSScrollView
- 10. 所選列的NSTableView的
- 11. 帶有多列的MySQL InnoDB主鍵
- 12. 帶有多列的Android SQLite數據庫
- 13. 帶有父代碼的多列參考
- 14. 帶有多個鍵值的散列表?
- 15. 使用帶有多列的DB2索引
- 16. 帶有許多不同列表的UIPickerView
- 17. 帶有一個輸出的多陣列
- 18. 帶有多列的SQL查詢加入
- 19. 將帶有一列的CSV文件轉換爲帶有多列的ASCII文件
- 20. 帶多列的列表框
- 21. NSTableView中帶有懸停效果的可點擊文本
- 22. NSTableView中的條件列值?
- 23. 將NSTableView用作網格,可能帶有垂直標籤?
- 24. 帶PutRequest的多列家庭
- 25. 帶多列的PHP項目
- 26. 帶多列的CheckAndPut操作
- 27. 帶文本的SQL多列
- 28. 帶多列的Sapply操作
- 29. 從Excel導出到帶有Excel的SQL Server的多列值列
- 30. NSTableView和懸停在列上
我該如何測試它?我有多列,但我希望數據只能在其中一列顯示 – 2010-02-05 22:56:36
我已經更新了有關此更詳細的詳細信息的答案。基本上你檢查列參數是否是你感興趣的那個,否則返回'nil'。 – 2010-02-06 00:49:53
謝謝!!!!!! – 2010-02-06 01:33:38