gpt4 book ai didi

objective-c - 将 NSPopUpButtonCell 与 NSTableView 一起使用

转载 作者:太空狗 更新时间:2023-10-30 03:44:23 28 4
gpt4 key购买 nike

您好,我正在尝试在 NSTableView 中使用 NSPopUpButtonCell。基本上,当您在弹出窗口中选择一个项目时,我希望它显示在 TableView 列/行中。当按下弹出单元格中的项目时,我使用“tableView:setObject:forTableColumn:row”将其存储在数据源中,然后当表请求数据时,我检索并设置“tableView:objectValueForTableColumn:”中弹出单元格的状态:排:”。请找到我的代码。我现在完全被困住了。我希望有人能理解它。提前谢谢你。

这是在 Controller 内部:

  //Create the table columns
NSTableColumn *nameColumn = [[NSTableColumn alloc] initWithIdentifier:LXDetailItemName];
NSTableColumn *dataTypeColumn = [[NSTableColumn alloc] initWithIdentifier:LXDetailItemDataType];
NSTableColumn *deviceColumn = [[NSTableColumn alloc] initWithIdentifier:LXDetailItemDevice];

//Data type column drop down
NSPopUpButtonCell *dataTypeDropDownCell = [[NSPopUpButtonCell alloc] initTextCell:@"" pullsDown:YES];
[dataTypeDropDownCell setBordered:NO];
[dataTypeDropDownCell setEditable:YES];

NSArray *dataTypeNames = [NSArray arrayWithObjects:@"NULL", @"String", @"Money", @"Date", @"Int", nil];
[dataTypeDropDownCell addItemsWithTitles:dataTypeNames];
[dataTypeColumn setDataCell:dataTypeDropDownCell];

//Add the columns to the table
[tableView addTableColumn:nameColumn];
[tableView addTableColumn:dataTypeColumn];
[tableView addTableColumn:deviceColumn];
enter code here

这是在数据源/委托(delegate)类中。

enter code here

@implementation LXTestDataSource

- (id)init
{
self = [super init];

if (self)
{
tableContents = [[NSMutableArray alloc] init];

//Setup test data
NSMutableArray *keys = [NSMutableArray arrayWithObjects:LXDetailItemName, LXDetailItemDataType, LXDetailItemDevice, nil];
NSMutableArray *objects = [NSMutableArray arrayWithObjects:@"one", @"NULL", @"NULL", nil];

for (int i = 0; i < 4; i++)
{
NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] initWithObjects:objects forKeys:keys];
[tableContents addObject:dictionary];
[dictionary release];
}
}

return self;
}

- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView
{
return [tableContents count];
}


- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
{
if ([[aTableColumn identifier] isEqualToString:LXDetailItemDataType])
{
NSMutableDictionary *rowDictionary = [tableContents objectAtIndex:rowIndex];
NSString *title = [rowDictionary objectForKey:LXDetailItemDataType];

NSLog(@"objectValueForTableColumn: %@", title); //DEBUG

return [NSNumber numberWithInt:[[aTableColumn dataCell] indexOfItemWithTitle:title]];
}
else if ([[aTableColumn identifier] isEqualToString:LXDetailItemDevice])
{
NSMutableDictionary *rowDictionary = [tableContents objectAtIndex:rowIndex];
NSString *title = [rowDictionary objectForKey:LXDetailItemDevice];

NSLog(@"objectValueForTableColumn: %@", title); //DEBUG

return [NSNumber numberWithInt:[[aTableColumn dataCell] indexOfItemWithTitle:title]];
}
else
{
NSMutableDictionary *rowDictionary = [tableContents objectAtIndex:rowIndex];
return [rowDictionary objectForKey:[aTableColumn identifier]];
}
}


- (void)tableView:(NSTableView *)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
{
if ([[aTableColumn identifier] isEqualToString:LXDetailItemDataType])
{
NSMenuItem *menuItem = [[aTableColumn dataCell] itemAtIndex:[anObject integerValue]];

NSMutableDictionary *rowDictionary = [tableContents objectAtIndex:rowIndex];

NSLog(@"%@", [menuItem title]); //DEBUG

//Update the object value at the column index
[rowDictionary setObject:[menuItem title] forKey:LXDetailItemDataType];
}
else if ([[aTableColumn identifier] isEqualToString:LXDetailItemDevice])
{
NSMenuItem *menuItem = [[aTableColumn dataCell] itemAtIndex:[anObject integerValue]];

NSMutableDictionary *rowDictionary = [tableContents objectAtIndex:rowIndex];

NSLog(@"%@", [menuItem title]); //DEBUG

//Update the object value at the column index
[rowDictionary setObject:[menuItem title] forKey:LXDetailItemDevice];
}
else
{
//Get the row
NSMutableDictionary *rowDictionary = [tableContents objectAtIndex:rowIndex];

//Update the object value at the column index
[rowDictionary setObject:anObject forKey:[aTableColumn identifier]];
}
}

@end

最佳答案

我想我已经明白了。单击菜单项后,我使用弹出单元格的方法“setTitle:”更新单元格的文本。这是我使用的 TableView 委托(delegate)方法。

- (void)tableView:(NSTableView *)aTableView willDisplayCell:(id)aCell forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
{
if ([[aTableColumn identifier] isEqualToString:LXDetailItemDataType])
{
NSMutableDictionary *rowDictionary = [tableContents objectAtIndex:rowIndex];
NSString *title = [rowDictionary objectForKey:LXDetailItemDataType];

[aCell setTitle:title];
}
else if ([[aTableColumn identifier] isEqualToString:LXDetailItemDevice])
{
NSMutableDictionary *rowDictionary = [tableContents objectAtIndex:rowIndex];
NSString *title = [rowDictionary objectForKey:LXDetailItemDevice];

[aCell setTitle:title];
}
}

关于objective-c - 将 NSPopUpButtonCell 与 NSTableView 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3485862/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com