ios7 - UITableViewCell,内置UIPickerView和UIDatePicker

Dav*_*nte 6 uitableview uipickerview ios7

一个职位所处理的主题:如何使在线UIPickerView.因为我很懒,所以任何人都可以指向我的代码片段.说实话,我发现Apple DateCell样本很迂腐 - 必须有一个更优雅的方法.

dateCell应用程序是一个好的开始吗?还是有其他更好的链接.我很感激任何建议.

如果您阅读本文并且不理解我的要求/目标,请参阅上面引用的两篇帖子或者只需下载Apple Sample(需要开发帐户).

Flo*_*lke 10

我使用另一个 - 也许更简单 - 解决这个问题的解决方案.

我们有两个细胞的图像

  1. 日期标签单元格
  2. 日期选择器单元格

大多数"魔法"都在表视图委托的tableView:heightForRowAtIndexPath:方法中:

- (CGFloat)tableView:(UITableView:)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CGFloat heightForRow = tableView.rowHeight;

    if ([self isDatePickerRowAtIndexPath:indexPath]) {
        heightForRow = (self.isDatePickerShown) ? heightOfDatePicker : 0.0;
    }

    return heightForRow;
}
Run Code Online (Sandbox Code Playgroud)

所以你只需通过返回高度来"隐藏"日期选择器0.0.


在该tableView:didSelectRowAtIndexPath:方法中,您可以进行切换:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ([self isDateLabelRowAtIndexPath:indexPath])
    {
        self.datePickerIsShown = ! self.isDatePickerShown;
        [tableView beginUpdates];
        [tableView endUpdates];
    }
}
Run Code Online (Sandbox Code Playgroud)

调用空beginUpdates endUpdates块强制表tableView:heightForRowAtIndexPath:再次调用(动画)并很好地淡入或淡出日期选择器单元格.


当日期选择器细胞是在你可能还需要更新一节的最后一个日期标签细胞的separatorInsetUIEdgeInsetsZero时,它显示的日期选择器是隐藏的默认值.


编辑:

为了完整性:datePickerIsShown是一个简单的布尔值:

@property(nonatomic, getter = isDatePickerShown) BOOL datePickerIsShown;
Run Code Online (Sandbox Code Playgroud)

方法isDateLabelRowAtIndexPath:isDatePickerRowAtIndexPath:只是辅助方法,将给定indexPath的数据与适当单元格的已知索引路径进行比较:

- (BOOL)isDatePickerRowAtIndexPath:(NSIndexPath *)indexPath
{
    return ([self.datePickerIndexPath compare:indexPath] == NSOrderedSame);
}
Run Code Online (Sandbox Code Playgroud)

编辑2:

缺少一个额外的步骤:确保将日期选择器单元格的clipsToBounds属性设置为YES,否则您将获得一些视图故障.