「第 1 の数値」に「第 2 の数値」を掛けて「小計」を求めます。「合計」ボタンを押すと、「小計」の合計が表示されます
画像でわかるように、数字「5」を含むセルは編集可能な状態になっています。「合計」ボタンをクリックすると、「小計」列の数値を合計するメソッドがトリガーされます。「合計」ボタンの下のラベルにあるように、正解が 136.00 ではなく 156.00 になるように、加算が実行される前に編集可能な状態の数値が自動的に保存されるようにしたい
「第 1 の数値」に「第 2 の数値」を掛けて「小計」を求めます。「合計」ボタンを押すと、「小計」の合計が表示されます
画像でわかるように、数字「5」を含むセルは編集可能な状態になっています。「合計」ボタンをクリックすると、「小計」列の数値を合計するメソッドがトリガーされます。「合計」ボタンの下のラベルにあるように、正解が 136.00 ではなく 156.00 になるように、加算が実行される前に編集可能な状態の数値が自動的に保存されるようにしたい
MVCデザインパターンを思い出してください
あなたNSTableView
は単なるビューであり、その上にModel(Array)を表示します。
したがって、ビューパーツの値を変更しましたが、モデルは変更されていません。モデル、つまり、テーブルビューに表示している配列またはコレクションを変更する必要があります。
ボタンアクションで、を呼び出すだけです[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]);
}
編集中のセル (または、実際にはテキスト フィールド) を追跡する必要があり、「合計」ボタンがタッチされたときに、そのテキスト フィールドで「resignFirstResponder」を呼び出します。これにより、小計と配列または配列コントローラーも更新されます。 、最終的に正しい合計が得られます。
どのセルが編集されているかを追跡する 1 つの方法は、編集可能なすべてのセルのテキスト フィールドをすべてビュー (またはウィンドウ) コントローラーをデリゲートとして使用するように設定することです。これにより、デリゲートに基づいてどのセルが編集されているかがわかります。メソッドcontrol:textShouldBeginEditing:
(編集中のテキスト フィールドは " control
" パラメータを介して渡されます... ivar またはプロパティで追跡できます)。これは、" " を呼び出すことができる同じセルですresignFirstResponder
。