4

テーブルビューからセクションを削除するための(コーディングと外観の点で)優れた方法を考え出そうとしています。理想的には、を削除するプロセスと同様のセクションを削除する方法を作成したいと思いますUITableViewCell(つまり、押されたときに赤い削除ボタンを表示する赤いマイナスボタン)。

この問題に対する既存の解​​決策はありますか?少し調べてみましたが、なかなか役に立たないです。既存のソリューションがない場合は、実装してみようと思っていました。私の計画は、セクションごとにカスタムヘッダーを作成することです。カスタムヘッダー内に、行を削除するときと同じように反応する削除ボタンを追加します。人々はこれがうまくいくと思いますか?

明確にするために、私はのセクションを削除するための既存の解決策があるかどうかを尋ねていUITableViewます。そうでない場合は、私のアイデアが実現可能だと人々が考えているのか、それとも私が見落としている問題があるのか​​を知りたいと思います。

前もって感謝します。

4

3 に答える 3

8

独自のheaderViewを実装するのが最善の方法です。Appleは、セクションを削除するための組み込みのユーザーインターフェイスを提供していません。iOSデバイスの通知領域をプルダウンすると、見栄えを良くする方法がわかります。

実装もそれほど複雑ではありません。私はこのようなものを使用しました:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    return 21.0f;
}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 21)];
    headerView.backgroundColor = [UIColor lightGrayColor];

    UILabel *headerLabel = [[UILabel alloc] initWithFrame:CGRectMake(8, 0, 250, 21)];
    headerLabel.text = [NSString stringWithFormat:@"Section %d", section];
    headerLabel.font = [UIFont boldSystemFontOfSize:[UIFont systemFontSize]];
    headerLabel.textColor = [UIColor whiteColor];
    headerLabel.backgroundColor = [UIColor lightGrayColor];
    [headerView addSubview:headerLabel];

    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.tag = section + 1000;
    button.frame = CGRectMake(300, 2, 17, 17);
    [button setImage:[UIImage imageNamed:@"31-circle-x"] forState:UIControlStateNormal];
    [button addTarget:self action:@selector(deleteButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
    [headerView addSubview:button];
    return headerView;
}

- (IBAction)deleteButtonPressed:(UIButton *)sender {
    NSInteger section = sender.tag - 1000;
    [self.objects removeObjectAtIndex:section];
    [self.tableView deleteSections:[NSIndexSet indexSetWithIndex:section] withRowAnimation:UITableViewRowAnimationAutomatic];

    // reload sections to get the new titles and tags
    NSInteger sectionCount = [self.objects count];
    NSIndexSet *indexes = [NSMutableIndexSet indexSetWithIndexesInRange:NSMakeRange(0, sectionCount)];
    [self.tableView reloadSections:indexes withRowAnimation:UITableViewRowAnimationNone];
}

ここに画像の説明を入力してください

于 2012-05-31T15:30:54.213 に答える
5

はい、テーブルビューのセクションを削除するために使用できる既存のメソッドがあります。次のメソッドを使用できます。

[m_TableView beginUpdates];
[m_TableView deleteSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationTop];
[m_TableView endUpdates];

ただし、変更する必要のあるセクションを削除するときは、次の点に注意する必要があります。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

これで、セクション番号が1つ減りました。

于 2012-05-31T13:37:30.337 に答える
1

私が正しければ、AppleはUITableView編集モードでのみ行の削除を提供します。

特定のセクションを削除するためのボタンを追加する3つの方法を考えることができます。

まず、のセクションの横にボタンを配置するUITableViewと、その中には表示されUITableViewません(セクションのタイトルの横にボタンを配置することはできないと思いますUITableView。または、可能かもしれませんが、方法がわかりません。 )。が編集可能モードであるかどうかを確認し、UITableViewそれに応じてボタンを表示または非表示にすることができます。

次に、に削除ボタンが必要な場合は、UITableViewcuntom UITableViewCellを作成し、セル内にセクション削除ボタンを配置できます。そうすれば、すべてにボタンがありますがUITableViewCell、これはそれほど素晴らしいことではありません。

3番目の選択肢は、ボタンを提供しないことです。Appleのデフォルトの方法でユーザーにセルを削除させるだけです。あなたがしていることは、セクションにデータを入力するために使用された配列に残っているオブジェクトの数を追跡し続けることです。カウントが0になったら、セクションを削除します。

これが私が以前に同じようなことをするためにしたことです:

firstLevelArrayにはいくつかのsecondLevelArrayNSMutableArrayが含まれておりNSMutableArray、それぞれにいくつかのオブジェクトが含まれています。したがって、すべてのsecondLevelArrayはセクションのデータを提供し、secondLevelArrayのオブジェクトはすべてのセルのデータを提供します。- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableViewで、私はします、そして私がreturn [firstLevelArray count];セクションを削除したいところはどこでも、後に[firstLevelArray removeObjectAtIndex:someIndex]、私はします[myTableView reloadData]

お役に立てれば

于 2012-05-31T14:34:18.410 に答える