0

下图显示了我的应用

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

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

4

2 回答 2

2

回想一下 MVC 设计模式

NSTableView只是一个视图,您将模型(数组)显示在它上面。

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

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

检查示例:

- (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]);

}
于 2013-03-10T07:47:15.533 回答
0

您需要跟踪正在编辑的单元格(或者实际上是文本字段),当触摸“总计”按钮时,在该文本字段上调用“resignFirstResponder”,这也应该更新您的小计和您的数组或数组控制器,最终为您提供正确的总数。

跟踪正在编辑哪个单元格的一种方法是将所有可编辑单元格的文本字段设置为全部使用您的视图(或窗口)控制器作为委托,然后您将根据委托知道正在编辑哪个单元格方法control:textShouldBeginEditing:(正在编辑的文本字段通过“ control”参数传入...您可以在 ivar 或属性中跟踪它)。这就是你可以调用“ resignFirstResponder”的同一个单元格。

于 2013-03-10T07:37:38.740 回答