有number篇文章涉及主题:如何制作inline UIPickerView。由于我很懒,有没有人能指点一下代码片段。老实说,我觉得苹果的DateCell示例过于学究 - 一定有更优雅的方法。
日期单元格应用程序是一个好的起点吗?还是有其他更好的链接。我会感激任何建议。
如果您阅读此内容并不理解我的要求/目标,请参阅上述两篇文章或直接下载Apple Sample(需要开发者帐户)。
有number篇文章涉及主题:如何制作inline UIPickerView。由于我很懒,有没有人能指点一下代码片段。老实说,我觉得苹果的DateCell示例过于学究 - 一定有更优雅的方法。
日期单元格应用程序是一个好的起点吗?还是有其他更好的链接。我会感激任何建议。
如果您阅读此内容并不理解我的要求/目标,请参阅上述两篇文章或直接下载Apple Sample(需要开发者帐户)。
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
,否则会出现一些视图故障。