0

ユーザーが並べ替えできるようにしたいグループ化されたテーブルがあります。2つのグループを作りたいです。グループ A からグループ B に行を移動するとき、グループ B の一番上の行をグループ A の一番下に移動したい.グループ B からグループ A に行を移動するとき、一番下の行が欲しいグループ A のグループをグループ B の先頭に移動します。

このようにして、テーブル内の各グループのサイズが維持されます。これは可能ですか?

どうもありがとうございました!

4

1 に答える 1

0

ドラッグの進行中に行を移動させるような方法でこれを行うための明白な方法を見つけることができませんでした。

ただし、ドラッグが完了すると機能するはずの何かがあります。ただ、どういうわけかわからないのですが、ドラッグが完了するとディスプレイがめちゃくちゃになってしまいます。これが私がそれをしている方法です:

- (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
    return 2;
}

- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    switch (section) {
        case INDEX_OF_SECTION_SELECTED_READOUTS:
            return NUMBER_OF_READOUTS_DISPLAYED;
            break;
        case INDEX_OF_SECTION_UNSELECTED_READOUTS:
            return NUMBER_OF_POSSIBLE_READOUT_CHOICES - NUMBER_OF_READOUTS_DISPLAYED;
            break;
        default:
            return 0;
            break;
    }
}

- (NSString *) tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    switch (section) {
        case INDEX_OF_SECTION_SELECTED_READOUTS:
            return @"Displayed";
            break;
        case INDEX_OF_SECTION_UNSELECTED_READOUTS:
            return @"Available";
            break;
        default:
            return @"";
            break;
    }
}

- (int) getIndexFromIndexPath:(NSIndexPath *)indexPath {
    int index = indexPath.row;
    if (indexPath.section == INDEX_OF_SECTION_UNSELECTED_READOUTS) {
        index += NUMBER_OF_READOUTS_DISPLAYED;
    }
    return index;
}

- (void) tableView:(UITableView *) tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
    int fromIndex = [self getIndexFromIndexPath:fromIndexPath];
    int toIndex = [self getIndexFromIndexPath:toIndexPath];

    if (toIndex < fromIndex) {       
        // Shuffle the to row and everything beneath it down by one
        for (int i = fromIndex; i > toIndex; i--) {
            [readouts exchangeObjectAtIndex:i withObjectAtIndex:i-1];
        }
    }
    else {
        // Shuffle the to row and everything above it up by one
        for (int i=fromIndex; i < toIndex; i++) {
            [readouts exchangeObjectAtIndex:i withObjectAtIndex:i+1];    
        }
    }

    // Now update the order for the readouts
    for (int i=0; i < [readouts count]; i++) {
        NSString *key = [readouts objectAtIndex:i];     
        [readoutService setReadoutType:key index:i];
    }   
}

これは正しいはずですが、ドラッグが完了すると、セルはディスプレイから完全に失われます(セルがあるべき場所に背景のみが表示されます)。

moveRowAtIndexPath内から[self.tableviewreloadData]を呼び出そうとしましたが、Appleのドキュメントには、「特にbeginUpdatesとendUpdatesの呼び出しで実装されたアニメーションブロック内で、行を挿入または削除するメソッドでは呼び出さないでください」と記載されています。

私はこれに固執し、表示の問題を修正する方法についての入力を求めています。

于 2010-09-27T03:50:11.360 に答える