0

ボタンを押すと行を追加するテーブルビューがあります。itmeNo 行は、行ごとに昇順で文字列から番号が付けられます。私の問題は、ユーザーが行を削除すると、番号が順番に並んでいないことです。

すなわち 1,2,3,4,5,

ユーザーが行 3 と 4 を削除すると、番号が付けられます

1,2,5

数値でソートする方法に少しこだわっていますか?私が持っている場所で[self.observations count] + 1];、おそらくこれを変更できるので、itemNo常に数値の昇順でソートします

要約すると、私は常にテーブルビューの行番号文字列に常に連続番号を付けたいと思っています

少しリーチしましたが、これまでのところ、delete メソッドを試し[self.tableView reloadData];、テーブル ビューの並べ替えを可能にするメソッドをいじってみました。

 - (void)addObservationButtonPressed:(id)sender
{
LogCmd();
Observation *observation = [[ICObservationManager manager] newObservation];
observation.createdAt = [NSDate date];
observation.modifiedAt = [NSDate date];
observation.certificate = self.certificate;
observation.itemNo = [NSString stringWithFormat:@"%d", [self.observations count] + 1];
[self.certificate addObservationsObject:observation];
[self loadData];
[self.tableView reloadData];
[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:self.observations.count-1 inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:YES];
}


 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 {
return [self.certificate.observations count];
}



 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"ObservationsCellIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
Observation *observation = [self.observations objectAtIndex:indexPath.row];
NSString *itemLabel = [NSString stringWithFormat:@"%@. %@",
                       observation.itemNo,
                       (observation.item.length ? observation.item : @"No description")];
cell.textLabel.text = itemLabel;

return cell;
}

 //Delete observations

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
 {

if (editingStyle == UITableViewCellEditingStyleDelete) {
    [self.managedObjectContext deleteObject:[self.observations objectAtIndex:indexPath.row]];
    [self.appDelegate saveContext];
    [self.observations removeObjectAtIndex:indexPath.row];
    [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];

 }

}
4

3 に答える 3

0

行を削除する場合はUITableView、@ rohitのようにもう一度並べ替えてから、行を削除し、順序に従ってテーブルをリロードします。お役に立てれば。

于 2013-06-12T11:59:10.217 に答える
0

このコードを試してください

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
 {

if (editingStyle == UITableViewCellEditingStyleDelete) {
    [self.managedObjectContext deleteObject:[self.observations objectAtIndex:indexPath.row]];
    [self.appDelegate saveContext];
    [self.observations removeObjectAtIndex:indexPath.row];

//need to add these lines
 NSSortDescriptor *sortByUploaded =[NSSortDescriptor sortDescriptorWithKey:@"itmeNo"ascending:YES];

  NSArray *sortDescriptorArr = [NSArray arrayWithObjects:sortByUploaded,nil];

 self.observations = [NSMutableArray arrayWithArray:[self.observations sortedArrayUsingDescriptors:sortDescriptorArr]];


    [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];

 }

}

機能しない場合はお知らせください

于 2013-06-12T11:52:26.340 に答える