iOS在UITableViewCells之间显示UIDatePicker [英] iOS Show UIDatePicker between UITableViewCells
问题描述
在iOS 7中,鼓励开发人员在需要输入时在表格单元格之间显示日期选择器,然后在完成时将其隐藏.我怎样才能达到这种效果?
In iOS 7, developers are encouraged to show date pickers between table cells when needed for input, and then hide them when done. How can I achieve this effect?
推荐答案
Vasilica Costescu在此处提供了很棒的教程: http://masteringios.com/blog/2013 /10/31/ios-7-in-line-uidatepicker/
Vasilica Costescu has a great tutorial on it here: 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
关键是隐藏/显示方法:
The key bits are the hide/show methods:
- (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来隐藏"该行:
And this UITableViewDelegate method will "hide" the row by setting its height to 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.)
You can call the hide/show methods from a button or just by selecting rows in the table. (Note: If there are text fields the other rows, then you may need to hide the datePicker in the textFieldDidBeginEditing delegate method).
-(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使用UIPickerView缓慢打开UITableViewController
这篇关于iOS在UITableViewCells之间显示UIDatePicker的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!