我正在构建一个允许用户从UITableView选择日期的应用程序。 tableView是静态的并且已分组。我已经遍历了许多问题,包括this one,试图弄清楚如何完成此任务-但似乎没有一种方法能达到最佳效果。 Apple的日历应用程序具有非常流畅且美观的动画,我之前浏览过的所有示例都没有设法重新创建。

这是我想要的结果:

有人可以给我指出一个教程,还是解释一下如何以最简洁,最直接的方式完成如此平滑的动画,就像我们在日历应用程序中看到的那样?

非常感谢!

埃里克

最佳答案

我假设您正在使用 Storyboard ,该示例是UIPickerView:
在包含您要填充的文本字段的单元格的正下方创建一个tableviewcell,然后在检查器中将单元格的行高设置为216.0,然后向该单元格添加一个UIPickerView。

接下来,通过 socket 将UIPickerView连接到您的viewcontroller并将以下属性添加到您的ViewController.h:

@property (weak, nonatomic) IBOutlet UIPickerView *statusPicker;
@property BOOL statusPickerVisible;

在您的ViewController.m中执行viewWillAppear
self.statusPickerVisible = NO;
self.statusPicker.hidden = YES;
self.statusPicker.translatesAutoresizingMaskIntoConstraints = NO;

添加两种方法:
- (void)showStatusPickerCell {
    self.statusPickerVisible = YES;
    [self.tableView beginUpdates];
    [self.tableView endUpdates];
    self.statusPicker.alpha = 0.0f;
    [UIView animateWithDuration:0.25
                 animations:^{
                     self.statusPicker.alpha = 1.0f;
                 } completion:^(BOOL finished){
                     self.statusPicker.hidden = NO;
                 }];];
}

- (void)hideStatusPickerCell {
    self.statusPickerVisible = NO;
    [self.tableView beginUpdates];
    [self.tableView endUpdates];
    [UIView animateWithDuration:0.25
                 animations:^{
                     self.statusPicker.alpha = 0.0f;
                 }
                 completion:^(BOOL finished){
                     self.statusPicker.hidden = YES;
                 }];
}

heightForRowAtIndexPath
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    CGFloat height = self.tableView.rowHeight;
    if (indexPath.row == 1){
        height = self.statusPickerVisible ? 216.0f : 0.0f;
    }
    return height;
}

didSelectRowAtIndexPath
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row == 0) {
        if (self.statusPickerVisible){
            [self hideStatusPickerCell];
        } else {
            [self showStatusPickerCell];
        }
    }
    [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
}

关于ios - 使用DatePicker展开和折叠UITableViewCells,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29678471/

10-09 07:04