私はまだObject-Cとして本当に環境に優しいので、うまくいけばこれをうまく伝えることができるので、うまくいけば私のコード例でこれを説明することができます。
私が持っているのは4行のテーブルです。各行には、ラベル(Clock in time、out to昼食時間など)と時間(detailTextLabel)があります。ラベルは配列に格納され、詳細はNSDateファミリーの関数から生成されます(私の用語はご容赦ください)。時間の値を変更するために、時間を選択するように調整されたデータピッカーを使用します。ピッカーを使用して時刻が変更されたときに、アクションを使用して行の詳細を更新します。
次のコードスニペットは同じ*.mクラスにあります。
これは、これを切り取ったバージョンです-
// textLabel goes on the left, detailTextLabel goes on the right
// This puts the labelArray on the left and times on the right
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *kCustomCellID = @"CustomCellID";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCustomCellID];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:kCustomCellID] autorelease];
// This disable the hightlighter effect when we select a row.
// We need the highlighter, but we'll leave the code here.
// cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
cell.textLabel.text = [self.labelArray objectAtIndex:indexPath.row];
// --- Start of routine to work with adding hours and minutes to stuff
NSDateComponents *offsetComponents = [[NSDateComponents alloc] init];
// --- Set Clock In time (initially time 'now').
if (indexPath.row == [labelArray indexOfObjectIdenticalTo:@"Clock In"])
{
self.clockIn = [NSDate date];
cell.detailTextLabel.text = [self.dateFormatter stringFromDate:clockIn];
NSLog(@"Clock In - %@", clockIn);
//NSLog(@"Clock In (cell*) - %@", cell.detailTextLabel.text);
return cell;
}
// --- Set Out to Lunch time (initially clockIn + 5 hours)
if (indexPath.row == [labelArray indexOfObjectIdenticalTo:@"Out to Lunch"])
{
[offsetComponents setHour:5];
self.outToLunch = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]
dateByAddingComponents:offsetComponents toDate:[NSDate date] options:0];
cell.detailTextLabel.text = [self.dateFormatter stringFromDate:outToLunch];
NSLog(@"indexPath.row (Out to Lunch): %i", indexPath.row);
NSLog(@"Out to Lunch - %@", outToLunch);
//NSLog(@"Out to Lunch (cell*) - %@", cell.detailTextLabel.text);
return cell;
}
// Leaving out two other if clauses as they duplicate the Out to Lunch clause.
//cell.detailTextLabel.text = [self.dateFormatter stringFromDate:[NSDate date]];
//return cell;
return nil;
このコードのチャンクはうまく機能し、問題はありません。
「ClockIn」などの行が選択されると、アニメーションが呼び出され、datePickerを選択するときにスクロールが上に移動します。「クロックイン」によって時刻がスクロールされると、時刻が更新されます。
ここが私の問題です。「ClockIn」の時間が更新されると、「OuttoLunch」の行を更新する方法がわかりません。
これが私のピッキングアクションのために持っているコードです-
- (IBAction)dateAction:(id)sender
{
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
cell.detailTextLabel.text = [self.dateFormatter stringFromDate:self.pickerView.date];
NSDateComponents *offsetComponents = [[NSDateComponents alloc] init];
if (indexPath.row == [labelArray indexOfObjectIdenticalTo:@"Clock In"])
{
if (cell.detailTextLabel.text != [self.dateFormatter stringFromDate:clockIn])
{
NSLog(@"clockIn time changed...");
// Since clockIn time changed, we need to change outToLunch, inFromLunch, and clockOut
// Change the outToLunch time
[offsetComponents setHour:5];
self.outToLunch = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]
dateByAddingComponents:offsetComponents toDate:self.pickerView.date options:0];
NSLog(@"New Out to Lunch time: %@", [self.dateFormatter stringFromDate:outToLunch]);
// Here is where I get stuck
}
//return nil;
}
}
「outToLunch時間の変更」句について私が想像しているのは、次のようなものです...
- 新しいclockIn時間を取得し、それに5時間を追加して、これを新しいoutToLunch時間にします。a。NSLogは、この数学関数が機能したことを確認するためだけのものです。
- outToLunch時間セルのdetailTextLabelのインデックスを使用して、この新しい時間をそこに配置します。
同時に更新されるoutToLunch行とともにさらに2つの行があります。
これどうやってするの?
ご協力いただきありがとうございます。