gpt4 book ai didi

macos - 更新 NSTableView 单元格编辑上的数据源

转载 作者:行者123 更新时间:2023-12-03 16:40:29 25 4
gpt4 key购买 nike

我已经为此苦苦挣扎了三天。我已经在这里和谷歌上查找了我能找到的所有内容,所以请理解我在已经筋疲力尽地试图找到答案之后才问这个问题。我也是 Cocoa 的新手,所以如果这看起来微不足道,我很抱歉,但这对我来说不是。我在学! :)

我正在使用简单的字符串值填充 NSTableView。这就是我所需要的。我还需要这些值可以内联编辑。到目前为止一切顺利,我已经完成了所有工作。

问题是我不知道如何将这些更改保存到我的数据源中。我已经尝试了所有建议的委托(delegate)方法,但它们要么没有被调用,要么我无法弄清楚如何获取更新的值以分配给我的 NSMutableArray。

代码如下:

//
// AppDelegate.m
// TableView
//

// Created by Jay Moser on 2016-03-07.
// Copyright © 2016 Jay Moser. All rights reserved.
//

#import "AppDelegate.h"

@interface AppDelegate ()

@property (weak) IBOutlet NSWindow *window;
@end

@implementation AppDelegate
{
NSMutableArray* _tableContents;
IBOutlet NSTableView* _tableView;
}

- (IBAction)Add:(id)sender
{
[_tableView reloadData];
}

- (void)applicationDidFinishLaunching:(NSNotification *)notification
{
_tableContents = [[NSMutableArray alloc] init];

[_tableContents addObject:@"Item 1"];
[_tableContents addObject:@"Item 2"];
[_tableContents addObject:@"Item 3"];
[_tableContents addObject:@"Item 4"];
[_tableContents addObject:@"Item 5"];
[_tableContents addObject:@"Item 6"];
[_tableContents addObject:@"Item 7"];
[_tableContents addObject:@"Item 8"];

[_tableView reloadData];
}

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView
{
return [_tableContents count];
}

- (NSView*)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
NSTableCellView* cellView = [_tableView makeViewWithIdentifier:@"name" owner:self];
cellView.textField.stringValue = _tableContents[row];

return cellView;
}

// ====================================================================================
//
// If I run the application, double click an item in the tableview and, for example,
// rename "Item 4" to "Renamed Item" ... I need a method here to detect that the change
// happened and changes "Item 4" in _tableContents to "Renamed Item"
//
//
// ====================================================================================

@end

最佳答案

您需要指定文本字段的目标和操作,当您的单元格完成编辑时将调用该目标和操作:

- (NSView*)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
NSTableCellView* cellView = [_tableView makeViewWithIdentifier:@"name" owner:self];
cellView.textField.stringValue = _tableContents[row];
[cellView.textField setTarget:self];
[cellView.textField setAction:@selector(onEditRow:)];
return cellView;
}

- (IBAction)onEditRow:(id)sender
{
NSInteger row = [_tableView rowForView:sender];
if (row != -1) {
_tableContents[row] = [sender stringValue];
}
}

参见this answer关于使用界面生成器设置操作的替代方法。

关于macos - 更新 NSTableView 单元格编辑上的数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35872101/

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