UITableViewCell 中的 UIDatePicker 更新 UITableViewCell 文本标签
Posted
技术标签:
【中文标题】UITableViewCell 中的 UIDatePicker 更新 UITableViewCell 文本标签【英文标题】:UIDatePicker in UITableViewCell update UITableViewCell textlabel 【发布时间】:2015-03-01 00:50:03 【问题描述】:我一直在经历在 UItableViewCell 中设置 UIDatePicker 的过程,当您在 UITableView 中选择任何其他 UITableViewCell 时,它会在选择其上方的 UITableViewCell 时显示出来。
我通过查阅来自其他人的大量文档以及低于平均水平的苹果UIDateCell example 创建了此代码。
到目前为止,我已经这样做了
显示和隐藏单元格 将 UIDatePicker 添加到单元格我不知道该怎么做的一件事是,一旦日期发生变化,如何将该日期传递回 UIDatePicker 单元格上方的 UITableViewCell UILabel?
我在选择器方法中捕获日期。
这就是代码的样子。
- (void)viewDidLoad
//.. set up view, UITableView (because its a subview to this view) delegate and data source etc then create UIDatePicker
//Get datepicker ready
datePickerForCell = [[UIDatePicker alloc] init];
datePickerForCell.datePickerMode = UIDatePickerModeDate;
[datePickerForCell addTarget:self action:@selector(datePickerChanged:) forControlEvents:UIControlEventValueChanged];
//...
#pragma mark UITableViewStuff
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
[sheetsTableView beginUpdates];
// typically you need know which item the user has selected.
// this method allows you to keep track of the selection
if (indexPath.section == 0)
if (indexPath.row == 0)
if (editingStartTime == true)
editingStartTime = false;
[sheetsTableView endUpdates];
else
editingStartTime = true;
[sheetsTableView endUpdates];
//.. sections method
//.. rows method etc
//.. change height of cell that has picker in it to hide and show when needed
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
if (indexPath.section == 0 && indexPath.row == 1) // this is my picker cell
if (editingStartTime)
return 219;
else
return 0;
else if ((indexPath.section == 2 && indexPath.row == 0) || (indexPath.section == 3 && indexPath.row == 0))
return 180;
else
return self.sheetsTableView.rowHeight;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (indexPath.section == 0)
if (indexPath.row == 0)
// Date
if (cell == nil)
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
cell.textLabel.text = @"Date";
cell.detailTextLabel.text = @"1/2/17";
else if (indexPath.row == 1)
// UIPicker
if (cell == nil)
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
cell.clipsToBounds = YES;
[cell.contentView addSubview:datePickerForCell];
//.. other cells below this
#pragma mark - datepicker
- (void)datePickerChanged:(UIDatePicker*) datePicker
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"dd MM yyyy"];
NSString *test = [NSString stringWithFormat:@"%@",[dateFormat stringFromDate:datePicker.date]];
NSLog(@"%@", test);
所以我的问题是,我如何将测试字符串(即使我还没有正确格式化它)传递给 indexPath (0,0) 中的 UITableViewCell UITextLabel
【问题讨论】:
【参考方案1】:拥有一个 ivar,用于存储您要为标签指定的内容。在您的 cellForRowAtIndexPath 中,您有一个 if,where,如果 indexpath 是您将此内容分配给标签的单元格
在 datePickerChanged 中你必须完成 ivar 的内容并在 tableview 中给出一个 reloadData。
【讨论】:
天啊……真是个白痴!!!!我刚刚意识到这有多容易......我在想我必须访问某种 UIDatePicker 代表......哦,伙计,我觉得自己很愚蠢(这是 2 个月的假期剂量)【参考方案2】:- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (indexPath.section == 0)
if (indexPath.row == 0)
// Date
if (cell == nil)
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
cell.textLabel.text = @"Date";
cell.detailTextLabel.text = [NSDateFormatter localizedStringFromDate:datePickerForCell.date
dateStyle:NSDateFormatterShortStyle
timeStyle:NSDateFormatterFullStyle];
else if (indexPath.row == 1)
// UIPicker
if (cell == nil)
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
cell.clipsToBounds = YES;
[cell.contentView addSubview:datePickerForCell];
//.. other cells below this
【讨论】:
以上是关于UITableViewCell 中的 UIDatePicker 更新 UITableViewCell 文本标签的主要内容,如果未能解决你的问题,请参考以下文章
更改 UITableViewCell 中的对象也更改了重用 UITableViewCell 的对象
确定 UITableViewCell 中的 UIButton
UITableViewCell 事件中的 UIButton 不起作用
UITableViewCell 中的 UICollectionView