我一直在UItableViewCell中设置UIDatePicker的过程,当在UITableView上选择任何其他UITableViewCell时,在其上面选择UITableViewCell时会显示该过程。
我创建了这段代码,其中包括来自其他人的大量文档以及低于平均值UIDateCell example的苹果。
到目前为止,我已经完成了这个
我不确定怎么做的一件事是,一旦日期已经过去,我如何将该日期传递回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
答案 0 :(得分:1)
有一个用于存储您想要提供标签的内容的ivar。在你的cellForRowAtIndexPath中你有一个if,其中,如果indexpath是你将这个内容分配给标签的单元格
在datePickerChanged中,您必须完成ivar的内容并在tableview中提供reloadData。
答案 1 :(得分:0)
- (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