iOS在UITableViewCells之间显示UIDatePicker

问题描述 投票:13回答:1

在iOS 7中,鼓励开发人员在需要输入时在表格单元格之间显示日期选择器,然后在完成时将其隐藏。如何达到此效果?

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9VbUo4Zy5wbmcifQ==” alt =“在此处输入图像描述”>

objective-c ios7 uidatepicker
1个回答
16
投票

Vasilica Costescu在此处提供了很棒的教程:http://masteringios.com/blog/2013/10/31/ios-7-in-line-uidatepicker/

对于静态表:http://masteringios.com/blog/2013/11/18/ios-7-in-line-uidatepicker-part-2/

示例代码在这里:https://github.com/costescv/InlineDatePicker

关键是隐藏/显示方法:

 - (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];
}

您可以通过按钮或仅通过选择表中的行来调用隐藏/显示方法。 (注意:如果其他行中有文本字段,则可能需要在textFieldDidBeginEditing委托方法中隐藏datePicker。)

-(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];
}

编辑:在一个表中使用多个内联选择器视图时要多加小心。我注意到它们往往会从情节提要中加载非常缓慢:iOS 7 slow to open UITableViewController with UIPickerView

© www.soinside.com 2019 - 2024. All rights reserved.