Objective c iOS显示UITableViewCells之间的UIDatePicker

Objective c iOS显示UITableViewCells之间的UIDatePicker,objective-c,ios7,uidatepicker,Objective C,Ios7,Uidatepicker,在iOS 7中,鼓励开发人员在需要输入时在表格单元格之间显示日期选择器,然后在完成时隐藏它们。我怎样才能达到这个效果 Vasilica Costescu在这里有一个很棒的教程: 对于静态表: 此处的示例代码: 关键位是隐藏/显示方法: - (void)showDatePickerCell { self.datePickerIsShowing = YES; [self.tableView beginUpdates]; [self.tableView endUpdate

在iOS 7中,鼓励开发人员在需要输入时在表格单元格之间显示日期选择器,然后在完成时隐藏它们。我怎样才能达到这个效果


Vasilica Costescu在这里有一个很棒的教程:

对于静态表:

此处的示例代码:

关键位是隐藏/显示方法:

 - (void)showDatePickerCell {
    self.datePickerIsShowing = YES;
    [self.tableView beginUpdates];
    [self.tableView endUpdates];

    self.datePicker.hidden = NO;
    self.datePicker.alpha = 0.0f;

    [UIView animateWithDuration:0.25 animations:^{
        self.datePicker.alpha = 1.0f;
    }];
}

- (void)hideDatePickerCell {
    self.datePickerIsShowing = NO;
    [self.tableView beginUpdates];
    [self.tableView endUpdates];

    [UIView animateWithDuration:0.25
                     animations:^{
                         self.datePicker.alpha = 0.0f;
                     }
                     completion:^(BOOL finished){
                         self.datePicker.hidden = YES;
                     }];
}
此UITableViewDelegate方法将通过将行的高度设置为0来“隐藏”行:

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

    if (indexPath.section == 0 && indexPath.row == 4 && self.datePickerIsShowing == NO){
        // hide date picker row
        return 0.0f;
    }
    return [super tableView:tableView heightForRowAtIndexPath:indexPath];
}
您可以通过按钮或仅通过选择表中的行来调用hide/show方法。(注意:如果其他行中有文本字段,则可能需要在textFieldDidBeginEditing委托方法中隐藏日期选择器)


编辑:在单个表中使用多个这些内联选择器视图时要小心。我注意到它们从故事板上加载的速度非常慢:

这里有一个问题的答案:@Antony F您是否有使用此代码和多个部分的经验@克里斯通-是的。在我的示例中,第0节的第4行只有一个日期选择器,但您可以在不同的行或节中添加多个日期选择器。我尝试过这样做,但由于某些原因,有时错误的选择器显示在错误的行中…@chrizstone-您是否在表行中添加/删除选择器视图?在没有看到代码的情况下很难猜出问题,因此您可能想发布另一个问题。当我在故事板视图中有3个以上的选择器时,我必须动态创建选择器(加载速度太慢),但创建每个选择器后,我将它们保留在行中。此外,由于一次有多个选择器处于活动状态会让用户感到困惑,因此我最终添加了一个nsindepath属性来跟踪活动选择器。
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.section == 0 && indexPath.row == 4) {
        if (self.datePickerIsShowing){
            [self hideDatePickerCell];
        }else {
            [self showDatePickerCell];
        }
    }
    [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
}