在xcode
开始构建tableView
之前,@"Date"
没有遇到麻烦。所有这些都是在代码中完成的,我不喜欢使用界面构建器。有一个字符串detailTextLabel
来保持它的位置。该表是可变的,每次在导航栏上选择添加按钮时,都会添加新的单元格。我在选定单元格中设置UIDatePicker
时遇到问题。我创建了deatailTextLabel
来选择日期并将其保存到所选单元格中的UIDatePicker
。我在每个单元格上都有一个按钮,它会显示detailTextLabel
,并且所有内容都应该关闭。但我不知道如何将UIDatePicker
设置为- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *aTableIdentifier = @"aTableIdentifier";
UITableViewCell *cell = [tableView
dequeueReusableCellWithIdentifier: aTableIdentifier];
if(cell == nil) {
cell = [[UITableViewCell alloc]
initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:aTableIdentifier];
}
NSUInteger row = [indexPath row];
cell.textLabel.text = [workoutName objectAtIndex:row];
cell.detailTextLabel.text = @"Date";
self.setDate = [UIButton buttonWithType:UIButtonTypeSystem];
self.setDate.frame = CGRectMake(268, 10.0, 44.0, 44.0);
[self.setDate setTitle:@"Date" forState:UIControlStateNormal];
[self.setDate setTitleColor:[UIColor grayColor] forState:UIControlStateSelected];
[cell addSubview:self.setDate];
[self.setDate addTarget:self action:@selector(showDatePicker) forControlEvents:UIControlEventTouchUpInside];
return cell;
}
-(void)showDatePicker{
self.myDatePicker = [UIDatePicker new];
self.myDatePicker.frame = CGRectMake(0,275, 320, 210);
self.myDatePicker.backgroundColor = [UIColor clearColor];
self.myDatePicker.datePickerMode = UIDatePickerModeDate;
[self.view addSubview:self.myDatePicker];
UITapGestureRecognizer *tapGestureRecognize = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissDatePicker:)];
tapGestureRecognize.numberOfTapsRequired = 1;
[self.view addGestureRecognizer:tapGestureRecognize];
}
-(void)dismissDatePicker:(UIGestureRecognizer *)gestureRecognizer {
NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init];
[outputFormatter setDateFormat:@"MMMM dd yyyy"];
[outputFormatter stringFromDate:self.myDatePicker.date];
dateLabel = [[UILabel alloc] init];
dateLabel.text = [outputFormatter stringFromDate:self.myDatePicker.date];
[self.myDatePicker removeFromSuperview];
[self.view removeGestureRecognizer:gestureRecognizer];
}
关闭时所选的日期。
viewController
现在我不确定我是否正确设置了这张桌子(很可能没有),因为当我选择一个单元格时,它会推送到另一个{{1}},但是没有显示正确的信息(现在不是我的问题)。
答案 0 :(得分:0)
最简单的方法是让UITableViewCell子类具有UIButton属性,或者设置completionHandler块,或者将UIDatePickerDelegate设置为UITableViewCell子类,但只是使用你所呈现的内容,这是一个可能未经测试的解决方案:
注意:这假设您在从日期选择器中进行选择的过程中无法向表中添加行。这也假设您的表中只有1个部分。
你可以设置"标签"每个" setDate"的属性按钮到"行" cellForRowAtIndexPath:函数内的整数,如下所示:
self.setDate.tag = row;
然后改变这一行:
[self.setDate addTarget:self action:@selector(showDatePicker) forControlEvents:UIControlEventTouchUpInside];
对此:
[self.setDate addTarget:self action:@selector(showDatePicker:) forControlEvents:UIControlEventTouchUpInside];
将冒号添加到' showDatePicker'的末尾。将发送按钮对象和方法。然后,您必须更改showDatePicker方法以接受按钮对象,如下所示:
-(void)showDatePicker:(id)sender
然后使用'发件人' object(这是你的setDate按钮),如下所示:
UIButton *button = (UIButton*)sender;
然后,您就可以获得'标记'属性关闭按钮,这是按钮对应的表的行。将其作为标记分配给“tapGestureRecognize”'像这样:
tapGestureRecognize.tag = button.tag;
然后方法dismissDatePicker' gestureRecognizer' object将包含标记,该标记再次对应于用户正在编辑的表行。重新创建单元格:
NSIndexPath *cellIndexPath = [NSIndexPath indexPathForRow:gestureRecognizer.tag inSection:0];
让我们说你的UITableView被命名为“myTableView'”。您可以像这样获得对原始单元格的引用:
UITableViewCell *theCell = [self.myTableView cellForRowAtIndexPath:cellIndexPath];
最后,您可以更改单元格的detailTextView:
theCell.detailTextLabel.text = [outputFormatter stringFromDate:self.myDatePicker.date];