objective-c - NSTableView 在失去焦点时无需按 Enter 键即可保存值

标签 objective-c macos cocoa nstableview

the below pic shows my app

“第一个数字”乘以“第二个数字”得到“小计”。按“总计”按钮给出“小计”的总和

如图所示,包含数字“5”的单元格处于可编辑状态。当我单击“总计”按钮时,会触发一个方法,该方法将“小计”列中的数字相加。我希望在执行添加之前自动保存处于可编辑状态的数字,以便正确答案为 156.00,而不是“总计”按钮下面的标签中所示的 136.00

最佳答案

记忆一下 MVC 设计模式

您的NSTableView只是一个 View ,您可以在其上显示模型(数组)。

因此,您更改了 View 部分中的值,但您的模型并未更改。您需要更改模型,即数组或在表格 View 中显示的任何集合。

在按钮操作中只需调用[tableView reloadData],然后- (void)tableView:(NSTableView *)tableView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn行:(NSInteger)行 :tablview 的委托(delegate)方法将被调用,并且您的模型将被更新。生成您键入的数据。

检查示例:

- (id)init
{
    self = [super init];
    if (self) {
        self.array=[NSMutableArray new];

        for (NSInteger i=0; i<30; i++) {
            [self.dict setObject:[NSString stringWithFormat:@"Obj %ld",i] forKey:[NSString stringWithFormat:@"%ld",i]];
            self.array[i]=@(i);
        }
    }
    return self;
}

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView{
    return self.array.count;
}

- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row{
    return self.array[row];
}


- (void)tableView:(NSTableView *)tableView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row{
    self.array[row]=object;

}

您的答案在这里:

- (IBAction)button:(id)sender {

    [self.myTable reloadData];

    NSInteger row=[self.myTable selectedRow];
    NSLog(@"%@",[self.array objectAtIndex:row]);

}

关于objective-c - NSTableView 在失去焦点时无需按 Enter 键即可保存值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15319922/

相关文章:

iphone - 在 iPhone 的彩信中附加本地镜像

objective-c - 无法比较两个 NSDates

java - GUI 对象在 Mac 上的 Java 中不显示

objective-c - 从主线程( cocoa )终止辅助线程

ios - 自定义 CIKernel 和 iOS7

ios - OS X 崩溃报告中的 "Application specific information"

cocoa - webview透明背景

cocoa - cocoa 应用程序中有多少个典型的 Controller 类?

java - 在 macOS Cocoa 应用程序中嵌入可执行 jar 文件

iphone - 如何将时区偏移缩写转换为官方时区标识符?