4

表示されていないセクションで使用[UITableView deleteSections:withRowAnimation:]した後、セクション ヘッダーは表示されたままになります。

この画像では、テーブルビューの表示部分が見えます

ここに画像の説明を入力

次の画像では、テーブルビュー全体が表示されています。ユーザーが下にスクロールするまで AISLE 2 は非表示になっており、1 行しか含まれていません。

ここに画像の説明を入力

下にスクロールして最後の行を削除すると、deleteSections. AISLE 1 から行を削除しても、セクション ヘッダーは同じ場所に残り、下にスクロールするとまだ表示されます。

さらに、AISLE 2 ヘッダーがビューに表示されるように下にスクロールしようとすると、UI は AISLE2 がテーブルビューの一部ではないため、すぐに上にスクロールします。つまり、これは削除したため、明らかにテーブルの一部ではないガベージ ビューです。何らかの理由で、iOS はこのビューを削除しませんが、テーブルから関連付けを解除します。

何か案は?

4

4 に答える 4

0

[tableview reload]1として作成してみてくださいnumberofsections

于 2013-01-24T09:43:39.510 に答える
0

データはどこから来ており、最初にいくつのセクションがあるかをどのように知ることができますか? これを説明することで、あなたの問題は簡単に解決できると思います。

nsmutablearray各インデックスが通路であり、各オブジェクトにその通路の製品が含まれる多次元があるように見えますか? または、通路ごとに異なる配列を使用できますか?

セルを削除するときは、残っているセルの数を確認して呼び出すだけです[self.tableView reloadData];

(仮定の)例では;

通路の配列がある場合:

NSMutableArray *aisleOne = [[NSMutableArray alloc] initWithObjects:@"Product1", @"Product2", nil];
NSMutableArray *aisleTwo = [[NSMutableArray alloc] initWithObjects:@"Product1", @"Product2", nil];
NSMutableArray *aisleThree = [[NSMutableArray alloc] initWithObjects:@"Product1", @"Product2", nil];
NSMutableArray *aisleFour = [[NSMutableArray alloc] initWithObjects:@"Product1", @"Product2", nil];

そして、それらを 1 つの配列に追加します。

NSMutableArray *aisleArray = [[NSMutableArray alloc] initWithObjects:aisleOne, aisleTwo, aisleThree, aisleFour, nil];

次に、セルを削除するときにこのコードを呼び出します。aisleArray(グローバルに定義する必要がある)からすべての空の通路を削除します。

NSMutableArray *tempArray = [[NSMutableArray alloc] initWithArray:aisleArray];
for (int i=0; i<[tempArray count]; i++) {
    if ([[tempArray objectAtIndex:i] count] == 0) {
        [aisleArray removeObjectAtIndex:i];
    }
}
[self.tableView reloadData];

これが機能するには、これらの 2 つの方法は次のようにする必要があります。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return [aisleArray count];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [[aisleArray objectAtIndex:section] count];
}

(未テスト)

于 2013-01-24T09:53:56.817 に答える