0

我有一个表格视图,其单元格包含一个 UISwitch。对于其中一个,当打开开关时,我想在表格视图中显示一个额外的行。我现在通过在我的tableView:numberOfRowsInSection:andtableView:cellForRowAtIndexPath:方法中设置条件并调用reloadDataswitch 的事件处理程序来做到这一点。这工作正常。但是,我想为表格单元格设置动画,但我不知道如何将其用于现有的表格视图插入/删除动画 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

这是您可以为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 更改row为and调用section的适当值,以反映您希望插入/删除该行的位置。insertRowsAtIndexPathsdleeteRowsAtIndexPaths

于 2013-02-22T05:35:54.920 回答
0

当您的开关打开时,只需在您的情况下将您的数组与其他项目或条件相加,然后调用此方法来指定您的部分。这将产生输入/输出效果,以向 tableview 显示越来越多的项目。

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