number个帖子正在处理主题:如何制作inline UIPickerView。因为我很懒,所以任何人都可以指向我的代码片段。说实话,我发现Apple DateCell样本很迂腐 - 必须有一个更优雅的方法。
dateCell应用程序是一个很好的起点吗?还是有其他更好的链接。我很感激任何建议。
如果您阅读此内容并且不理解我的要求/目标,请参阅上面引用的两篇帖子,或者只需下载Apple Sample(需要开发帐号)。
答案 0 :(得分:10)
我使用另一种 - 也许更简单 - 解决这个问题的解决方案。
我们有两个单元格的图像
大多数“魔法”都在表格视图委托的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;
}
因此,您只需返回0.0
的高度即可“隐藏”日期选择器。
在tableView:didSelectRowAtIndexPath:
方法中进行切换:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([self isDateLabelRowAtIndexPath:indexPath])
{
self.datePickerIsShown = ! self.isDatePickerShown;
[tableView beginUpdates];
[tableView endUpdates];
}
}
调用空的beginUpdates
endUpdates
块会强制该表再次调用tableView:heightForRowAtIndexPath:
(动画)并很好地淡入或淡出日期选择器单元格。
当日期选择器单元格是某个部分中的最后一个时,您可能还希望在隐藏日期选择器时将日期标签单元格的separatorInset
更新为UIEdgeInsetsZero
显示时的默认值。
修改强>
为了完整性:datePickerIsShown
是一个简单的布尔值:
@property(nonatomic, getter = isDatePickerShown) BOOL datePickerIsShown;
方法isDateLabelRowAtIndexPath:
和isDatePickerRowAtIndexPath:
只是将给定indexPath
与适当单元格的已知索引路径进行比较的辅助方法:
- (BOOL)isDatePickerRowAtIndexPath:(NSIndexPath *)indexPath
{
return ([self.datePickerIndexPath compare:indexPath] == NSOrderedSame);
}
编辑2:
缺少一个额外步骤:确保将日期选择器单元格的clipsToBounds
属性设置为YES
,否则会出现一些视图故障。