通过UI操作动画输入/输出表格视图单元格

时间:2013-02-22 05:00:14

标签: ios cocoa-touch uitableview

我有一个表格视图,其单元格包含一个UISwitch。对于其中一个,当开关打开时,我想在表格视图中显示另一行。我现在通过在tableView:numberOfRowsInSection:tableView:cellForRowAtIndexPath:方法中设置条件并在switch的事件处理程序中调用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;
}

谢谢!

3 个答案:

答案 0 :(得分:0)

添加动画表格单元格的方法是

[tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationRight];

其中tableView是您的表视图,indexPaths是一个包含新行的索引路径的可变数组。

答案 1 :(得分:0)

当您的开关启动时,只需在您的情况下添加带有附加项或条件的阵列,然后将此方法调用到您的部分。这将提供输入/输出效果,以显示越来越多的项目到tableview。

[mytv reloadSections: [NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationFade];

答案 2 :(得分: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;
    }
}

显然,将rowsection更改为insertRowsAtIndexPathsdleeteRowsAtIndexPaths调用的适当值,以反映您希望插入/删除此行的位置。< / p>