0

セルにUISwitchが含まれているテーブルビューがあります。そのうちの1つとして、スイッチをオンにしたときに、テーブルビューに追加の行を表示したいと思います。私は今、自分のメソッドとメソッドに条件を設定tableView:numberOfRowsInSection:し、スイッチのイベントハンドラーtableView:cellForRowAtIndexPath:を呼び出すことによってこれを行っています。reloadDataこれは正常に機能します。ただし、テーブルセルをインまたはアウトでアニメーション化したいので、これを既存のテーブルビューの挿入/削除アニメーションAPIに組み込む方法がわかりません。

私が持っているコード:

- (IBAction)didToggleContractProperties:(id)sender {
    UISwitch *toggle = (UISwitch *)sender;
    switch (toggle.tag) {
        case 100:        // Packaging requested
            self.contract.isPackingRequired = toggle.on;
            [self.tableView reloadData];
            break;
        case 101:        // On-campus pickup
            self.contract.isOnCampus = toggle.on;
            break;
        case 102:        // Insurance requested
            self.contract.isInsuranceRequested = toggle.on;
            break;
        default:
            break;
    }
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    // Return the number of rows in the section.
    if (section == 0) {
        if (self.contract.isPackingRequired)
            return 4;
        else
            return 3;
    }
    else if (section == 1)
        return 1;
    else
        return 1;
}

ありがとう!

4

3 に答える 3

0

アニメーション化されたテーブルセルを追加する方法はこれです

[tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationRight];

ここで、tableViewはテーブルビューであり、indexPathsは新しい行のインデックスパスを含む可変配列です。

于 2013-02-22T05:08:38.110 に答える
0

スイッチがオンになったら、配列に追加項目または条件を追加してから、このメソッドを呼び出してセクションを意図します。これにより、テーブルビューに表示されるアイテムが少なくなるイン/アウト効果が得られます。

[mytv reloadSections: [NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationFade];
于 2013-02-22T05:16:49.990 に答える
0

これは、isPackRequiredスイッチに対してこれを行う方法です。次に例を示します。

- (IBAction)didToggleContractProperties:(id)sender {
    UISwitch *toggle = (UISwitch *)sender;
    switch (toggle.tag) {
        case 100:        // Packaging requested
            if (self.contract.isPackingRequired != toggle.on)
            {
                self.contract.isPackingRequired = toggle.on;
                if (toggle.on)
                {
                    [self.tableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:3 inSection:0]]
                                          withRowAnimation:UITableViewRowAnimationMiddle];
                }
                else
                {
                    [self.tableView deleteRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:3 inSection:0]]
                                          withRowAnimation:UITableViewRowAnimationMiddle];
                }
            }
            break;
        case 101:        // On-campus pickup
            ...
        default:
            break;
    }
}

明らかに、andをand呼び出しの適切な値に変更して、rowこの行sectionを挿入/削除する場所を反映します。insertRowsAtIndexPathsdleeteRowsAtIndexPaths

于 2013-02-22T05:35:54.920 に答える