1

2 つの変更可能な配列があるとします。次のコードがあります。

- (void)viewDidLoad
{
    NSMutableArray *A = [[NSMutableArray alloc] init];
    NSMutableArray *B = [[NSMutableArray alloc] init];
    // fill up A
    // B remains empty
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // ...
    if (...)
    {
        // fill up the cell with datas of an object from A
    }
    else
    {
        // fill up the cell with datas of an object from B
    }
    //...
    return cell;
}


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (...)
    {
        // remove an object from A and put it in B
    }
    else
    {
        // remove an object from B and put in A
    }
    [tableView reloadData];
}

[tableView reloadData] がコメント アウトされている場合 (// [tableView reloadData])、「クリック」後よりもテーブルは期待どおりに無効化されません。また、現在のセルがスクロールされて画面内で再びスクロールされると、"cellForRowAtIndexPath" が呼び出され、コンテンツを取得する配列に応じてセルが右に "描画" されます。しかし、[tableView reloadData] がアクティブな場合、「cellForRowAtIndexPath」はまったく呼び出されず (!)、セルは画面から削除されます!

反応: なに?

その場でテーブルビューを無効にする方法を誰でも助けることができます(セルをスクロールしてスクロールするのではなく:))!

前もって感謝します!

4

2 に答える 2

0

それは私のせいでした.. このことについて、私にとってはとても良い経験です。メソッド:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [A count] + [B count];
}

[A カウント][B カウント]しか含まれていませんでした..実際には reloadData で適切に動作します。とにかく、 numberOfRowsInSectionが再度クエリされない間、スクロールアップ - スクロールダウンのために機能します。

ご支援いただきありがとうございます!

于 2011-06-27T10:55:16.017 に答える
0

UITableView メソッド -deleteRowsAtIndexPath ... を使用して、達成しようとしている削除を実行する必要があります。ただし、HIG に違反しているため、Apple はこの UI パラダイムを承認しない可能性があります。

削除を行うには、UITableViewDatasource の -commitEditingStyle...と共に編集プロパティを使用することを検討してください。ユーザーは、このテーブル ビューの使用法に既に慣れているため、Apple によって拒否されるリスクはありません。

于 2011-06-24T15:17:21.253 に答える